Skip to main content

Cartesian Product for NumPy - 40x faster than NumPy + itertools.product

Project description

Cartesian Product for NumPy - 40x faster than NumPy + itertools.product

pip install cythoncartesian2

Tested against Windows / Python 3.11 / Anaconda

Cython (and a C/C++ compiler) must be installed

cartesian_product(*args, outputdtype=np.uint32, dtype=np.uint32):
    Calculate the Cartesian product of input arrays.

    Parameters:
    - *args: Variable number of input arrays.
    - outputdtype (numpy.dtype): Data type of the output array.
    - dtype (numpy.dtype): Data type used for intermediate calculations. # be careful!

    Returns:
    - numpy.ndarray: Cartesian product of input arrays.

	
import random
from cythoncartesian2 import cartesian_product
import numpy as np

# Strings are NOT supported!

args=[[h*random.uniform(1,4) for h in (range(random.randint(2,9)))] for x in range(9)]
q=cartesian_product(*args,outputdtype=np.float32,dtype=np.uint32)

# array([[0.       , 0.       , 0.       , ..., 0.       , 0.       ,
#         0.       ],
#        [3.529998 , 0.       , 0.       , ..., 0.       , 0.       ,
#         0.       ],
#        [0.       , 3.715651 , 0.       , ..., 0.       , 0.       ,
#         0.       ],
#        ...,
#        [3.529998 , 7.956308 , 5.9014587, ..., 1.0379078, 7.9018135,
#         8.816498 ],
#        [0.       , 9.456019 , 5.9014587, ..., 1.0379078, 7.9018135,
#         8.816498 ],
#        [3.529998 , 9.456019 , 5.9014587, ..., 1.0379078, 7.9018135,
#         8.816498 ]], dtype=float32)

args=[[h for h in (range(8))] for x in range(9)]
q=cartesian_product(*args,outputdtype=np.uint8,dtype=np.uint32)

# %timeit q=cartesian_product(*args,outputdtype=np.uint8,dtype=np.uint32)
# 1.63 s ± 36.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

# %timeit (list(itertools.product(*args)))
# 11.3 s ± 180 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

# %timeit q=np.array(list(itertools.product(*args)),dtype=np.uint8)
# 1min 6s ± 282 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

# q
# Out[3]:
# array([[0, 0, 0, ..., 0, 0, 0],
#        [1, 0, 0, ..., 0, 0, 0],
#        [2, 0, 0, ..., 0, 0, 0],
#        ...,
#        [5, 7, 7, ..., 7, 7, 7],
#        [6, 7, 7, ..., 7, 7, 7],
#        [7, 7, 7, ..., 7, 7, 7]], dtype=uint8)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cythoncartesian2-0.10.tar.gz (22.0 kB view details)

Uploaded Source

Built Distribution

cythoncartesian2-0.10-py3-none-any.whl (22.3 kB view details)

Uploaded Python 3

File details

Details for the file cythoncartesian2-0.10.tar.gz.

File metadata

  • Download URL: cythoncartesian2-0.10.tar.gz
  • Upload date:
  • Size: 22.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for cythoncartesian2-0.10.tar.gz
Algorithm Hash digest
SHA256 25d601d4ee7f586201f06e044d82ab458c94c6238350af830b984414203a2b0e
MD5 3427372acd18b0e3cf3f174d245f14ec
BLAKE2b-256 493edc9239059cb81db257f7727d1833a8d982d97cc64a1756228ea180ea03ff

See more details on using hashes here.

File details

Details for the file cythoncartesian2-0.10-py3-none-any.whl.

File metadata

File hashes

Hashes for cythoncartesian2-0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 d537c8c10293507d16457fa3d09b52de0a7145c4db60a60346756f26a4dc3dcd
MD5 785bb3cbec72d1de4fb49cec2b751f73
BLAKE2b-256 93300f505293e93230618b396afd605052fd093331b313aa51a3f945aca76f1a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page