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
- Because of the toolchain paths
cd
to project rootSNNDPC/
cmake -DCMAKE_BUILD_TYPE=Release -G "NMake Makefiles" -S . -B build\release
cmake --build build\release --target Demo
build\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, because of
:=
syntax - IntelTBB: Optional, for parallelization
- OpenMP: Optional, for parallelization
To use other provided datasets in demo:
-
Modify variable
pathData
atSNNDPC/Demo.cpp:11
.- Macro
SOLUTION_DIR
is the absolute path toSNNDPC/
.
- Macro
-
Modify variables
k
,n
,d
, andnc
according to the paperVariable Reference k
Table 4, column Arg- n
Table 2, column No. of records d
Table 2, column No. of attributes nc
Table 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
fscanf
call 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.