# Sorts int/float 4x faster than numpy by using parallel_sort from C++
## the bigger the array, the bigger the difference
### pip install npfastsortcpp
It is basically a self-compiling Windows version of [https://stackoverflow.com/a/28663374/15096247](https://stackoverflow.com/a/28663374/15096247)
## Make sure you use the right MSVC C++ x64/x86 build tools (Link at the end of the description)
```python
# import the module:
from npfastsortcpp import parallelsort
# optional (if you want to check if the fast
# version is used)
# If the fast version can not be imported,
# you will see a warning when you call parallelsort
from npfastsortcpp import npfastsortconfig
npfastsortconfig.enablewarning=True
```
```
The first time you import the module, you will see this:
______________________________
Compiling ...
If you get an error, download:
https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&passive=false&cid=2030
and install: MSVC ..... C++ x64/x86 build tools
______________________________
Compiling C:/Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.pyx because it changed.
[1/1] Cythonizing C:/Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.pyx
running build_ext
building 'npparallelsortcpp' extension
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\bin\HostX86\x64\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -IC:\Users\Gamer\anaconda3\envs\stopjogo\include -IC:\Users\Gamer\anaconda3\envs\stopjogo\Include "-IC:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\include" "-IC:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" /EHsc /TpC:/Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.cpp /Fobuild\temp.win-amd64-cpython-39\Release\Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.obj
npparallelsortcpp.cpp
C:/Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.cpp(2746): warning C4244: '=': conversion from 'long' to 'char', possible loss of data
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\bin\HostX86\x64\link.exe" /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\Users\Gamer\anaconda3\envs\stopjogo\libs /LIBPATH:C:\Users\Gamer\anaconda3\envs\stopjogo /LIBPATH:C:\Users\Gamer\anaconda3\envs\stopjogo\PCbuild\amd64 "/LIBPATH:C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64" /EXPORT:PyInit_npparallelsortcpp build\temp.win-amd64-cpython-39\Release\Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.obj /OUT:C:\Users\Gamer\anaconda3\envs\stopjogo\lib\site-packages\npfastsortcpp\npparallelsortcpp.cp39-win_amd64.pyd /IMPLIB:build\temp.win-amd64-cpython-39\Release\Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp\npparallelsortcpp.cp39-win_amd64.lib
Creating library build\temp.win-amd64-cpython-39\Release\Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp\npparallelsortcpp.cp39-win_amd64.lib and object build\temp.win-amd64-cpython-39\Release\Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp\npparallelsortcpp.cp39-win_amd64.exp
Generating code
Finished generating code
```
### **If you get an error, download:**
[https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&passive=false&cid=2030](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&passive=false&cid=2030)
### **and install:**
MSVC ..... C++ x64/x86 build tools
### Let's compare numpy and npfastsortcpp
```python
from npfastsortcpp import parallelsort
from time import perf_counter
import numpy as np
arr=np.random.randint(1, 15000000 + 1,size=15000000)
#arr=np.random.randn(5000000)
arr2 = arr.copy()
start=perf_counter()
parallelsort(arr) # Sorting is in place! The function returns None!
print(f'npfastsortcpp: {perf_counter() - start}')
start=perf_counter()
np.sort(arr2)
print(f'numpy: {perf_counter() - start}')
npfastsortcpp: 0.27110049999998864
numpy: 0.9681288999999964
arr=np.random.randn(5000000)
arr2 = arr.copy()
start=perf_counter()
parallelsort(arr) # Sorting is in place! The function returns None!
print(f'npfastsortcpp: {perf_counter() - start}')
start=perf_counter()
np.sort(arr2)
print(f'numpy: {perf_counter() - start}')
npfastsortcpp: 0.11203969999999686
numpy: 0.35269389999999134
```
Raw data
{
"_id": null,
"home_page": "https://github.com/hansalemaos/npfastsortcpp",
"name": "npfastsortcpp",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "c++,numpy,sort",
"author": "Johannes Fischer",
"author_email": "<aulasparticularesdealemaosp@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/1a/cf/78a461fdb4f957fff8a4592473db6b45a2a3252905ff57b847b5bebe9f64/npfastsortcpp-0.10.tar.gz",
"platform": null,
"description": "\n# Sorts int/float 4x faster than numpy by using parallel_sort from C++\n\n\n\n\n\n## the bigger the array, the bigger the difference\n\n\n\n\n\n### pip install npfastsortcpp \n\n\n\nIt is basically a self-compiling Windows version of [https://stackoverflow.com/a/28663374/15096247](https://stackoverflow.com/a/28663374/15096247)\n\n\n\n\n\n## Make sure you use the right MSVC C++ x64/x86 build tools (Link at the end of the description)\n\n\n\n\n\n```python\n\n# import the module:\n\nfrom npfastsortcpp import parallelsort\n\n\n\n\n\n\n\n# optional (if you want to check if the fast\n\n# version is used) \n\n# If the fast version can not be imported, \n\n# you will see a warning when you call parallelsort\n\nfrom npfastsortcpp import npfastsortconfig\n\nnpfastsortconfig.enablewarning=True\n\n```\n\n\n\n\n\n\n\n```\n\nThe first time you import the module, you will see this:\n\n______________________________\n\nCompiling ... \n\nIf you get an error, download:\n\n https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&passive=false&cid=2030\n\nand install: MSVC ..... C++ x64/x86 build tools\n\n______________________________\n\nCompiling C:/Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.pyx because it changed.\n\n[1/1] Cythonizing C:/Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.pyx\n\nrunning build_ext\n\nbuilding 'npparallelsortcpp' extension\n\n\"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.34.31933\\bin\\HostX86\\x64\\cl.exe\" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -IC:\\Users\\Gamer\\anaconda3\\envs\\stopjogo\\include -IC:\\Users\\Gamer\\anaconda3\\envs\\stopjogo\\Include \"-IC:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.34.31933\\include\" \"-IC:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\include\" \"-IC:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\ucrt\" \"-IC:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\um\" \"-IC:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\shared\" \"-IC:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\winrt\" \"-IC:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.22621.0\\\\cppwinrt\" \"-IC:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\include\\um\" /EHsc /TpC:/Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.cpp /Fobuild\\temp.win-amd64-cpython-39\\Release\\Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.obj\n\nnpparallelsortcpp.cpp\n\nC:/Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.cpp(2746): warning C4244: '=': conversion from 'long' to 'char', possible loss of data\n\n\"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.34.31933\\bin\\HostX86\\x64\\link.exe\" /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\\Users\\Gamer\\anaconda3\\envs\\stopjogo\\libs /LIBPATH:C:\\Users\\Gamer\\anaconda3\\envs\\stopjogo /LIBPATH:C:\\Users\\Gamer\\anaconda3\\envs\\stopjogo\\PCbuild\\amd64 \"/LIBPATH:C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.34.31933\\lib\\x64\" \"/LIBPATH:C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\lib\\um\\x64\" \"/LIBPATH:C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\ucrt\\x64\" \"/LIBPATH:C:\\Program Files (x86)\\Windows Kits\\10\\\\lib\\10.0.22621.0\\\\um\\x64\" /EXPORT:PyInit_npparallelsortcpp build\\temp.win-amd64-cpython-39\\Release\\Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp/npparallelsortcpp.obj /OUT:C:\\Users\\Gamer\\anaconda3\\envs\\stopjogo\\lib\\site-packages\\npfastsortcpp\\npparallelsortcpp.cp39-win_amd64.pyd /IMPLIB:build\\temp.win-amd64-cpython-39\\Release\\Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp\\npparallelsortcpp.cp39-win_amd64.lib\n\n Creating library build\\temp.win-amd64-cpython-39\\Release\\Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp\\npparallelsortcpp.cp39-win_amd64.lib and object build\\temp.win-amd64-cpython-39\\Release\\Users/Gamer/anaconda3/envs/stopjogo/lib/site-packages/npfastsortcpp\\npparallelsortcpp.cp39-win_amd64.exp\n\nGenerating code\n\nFinished generating code\n\n```\n\n\n\n\n\n\n\n### **If you get an error, download:**\n\n\n\n[https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&passive=false&cid=2030](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&passive=false&cid=2030)\n\n\n\n\n\n### **and install:**\n\n\n\nMSVC ..... C++ x64/x86 build tools\n\n\n\n\n\n### Let's compare numpy and npfastsortcpp\n\n\n\n\n\n```python\n\n\n\nfrom npfastsortcpp import parallelsort\n\nfrom time import perf_counter\n\nimport numpy as np\n\narr=np.random.randint(1, 15000000 + 1,size=15000000)\n\n#arr=np.random.randn(5000000)\n\narr2 = arr.copy()\n\nstart=perf_counter()\n\nparallelsort(arr) # Sorting is in place! The function returns None!\n\nprint(f'npfastsortcpp: {perf_counter() - start}')\n\nstart=perf_counter()\n\nnp.sort(arr2)\n\nprint(f'numpy: {perf_counter() - start}')\n\nnpfastsortcpp: 0.27110049999998864\n\nnumpy: 0.9681288999999964\n\n\n\n\n\n\n\narr=np.random.randn(5000000)\n\narr2 = arr.copy()\n\nstart=perf_counter()\n\nparallelsort(arr) # Sorting is in place! The function returns None!\n\nprint(f'npfastsortcpp: {perf_counter() - start}')\n\nstart=perf_counter()\n\nnp.sort(arr2)\n\nprint(f'numpy: {perf_counter() - start}')\n\nnpfastsortcpp: 0.11203969999999686\n\nnumpy: 0.35269389999999134\n\n```\n\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Sorts int/float 4x faster than numpy by using parallel_sort from C++ (Windows only)",
"version": "0.10",
"split_keywords": [
"c++",
"numpy",
"sort"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "735c7298ea1f71743f503567fe7ac4ebbb7754457a1322b7141f28c50d1f1aa5",
"md5": "f50230e252785e4640e9d5ccdb42e2d4",
"sha256": "4cd08a10cbc839f920908450c3ea4efeffaa51c6d1d017876b1cbbde14d0c6f2"
},
"downloads": -1,
"filename": "npfastsortcpp-0.10-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f50230e252785e4640e9d5ccdb42e2d4",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 7843,
"upload_time": "2023-02-01T22:16:51",
"upload_time_iso_8601": "2023-02-01T22:16:51.884429Z",
"url": "https://files.pythonhosted.org/packages/73/5c/7298ea1f71743f503567fe7ac4ebbb7754457a1322b7141f28c50d1f1aa5/npfastsortcpp-0.10-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1acf78a461fdb4f957fff8a4592473db6b45a2a3252905ff57b847b5bebe9f64",
"md5": "3ebcc4226f70a995a302bf8f9c0148b1",
"sha256": "dcf876841c97fc5348915e455ea166f6a6a493010abea137e74ee34296bd52e5"
},
"downloads": -1,
"filename": "npfastsortcpp-0.10.tar.gz",
"has_sig": false,
"md5_digest": "3ebcc4226f70a995a302bf8f9c0148b1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5954,
"upload_time": "2023-02-01T22:16:53",
"upload_time_iso_8601": "2023-02-01T22:16:53.228624Z",
"url": "https://files.pythonhosted.org/packages/1a/cf/78a461fdb4f957fff8a4592473db6b45a2a3252905ff57b847b5bebe9f64/npfastsortcpp-0.10.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-02-01 22:16:53",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "hansalemaos",
"github_project": "npfastsortcpp",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "npfastsortcpp"
}