C++ and Python implementation of SNNDPC algorithm.
The Matlab version is moved to the branch MatlabImplementation.
If you use Windows:
- Open a Visual Studio developer command prompt (prefer x64 native)
cdto project rootSNNDPC/cmake -DCMAKE_BUILD_TYPE=Release -G "NMake Makefiles" -S . -B build\releasecmake --build build\release --target Demobuild\release\Demo.exe
The demo runs on the S2 dataset.
If CMake complains about its version, modify SNNDPC/CMakeLists.txt:1 to fit your CMake version.
To use other datasets, see Customization
Some highlighted requirements.
- Python: 3.8
- Vcpkg
- Intel TBB: Optional, for parallelization
- OpenMP: Optional, for parallelization
To use other provided datasets in demo:
-
Modify variable
pathDataatSNNDPC/Demo.cpp:14.- Macro
SOLUTION_DIRis the absolute path toSNNDPC/.
- Macro
-
Modify variables
k,n,d, andncaccording to the paperVariable Reference kTable 4, column Arg- nTable 2, column No. of records dTable 2, column No. of attributes ncTable 2, column No. of clusters
To use external datasets in Demo.cpp:
- Make sure your dataset has exactly 3 columns: x, y, and label.
- If you want to use more attributes, you need to edit the
fscanfcall atDemo.cpp:24.
- If you want to use more attributes, you need to edit the
To use external datasets in a custom runner:
- Load your dataset into a (flattened) 1D C-style array
data, shape[n×d].- For the logical 2D array, each row is a record, and each column is an attribute.
- Include
SNNDPC.hpp. - Call the
SNNDPC()with parametersk,n,d,nc, anddata. - The function will return two pointers, the centroids and the assignment.
- Both are a 1D array.
- Both are created by
new, you need to manually delete them to prevent memory leak.
If you have any inquiries, please open an issue instead of sending emails directly to me. My email address on the paper is no longer frequently checked.