Finds unique dimensions in multi-dimensional arrays, compresses and decompresses arrays ...
Project description
Finds unique dimensions in multi-dimensional arrays, compresses and decompresses arrays ...
pip install cythonuniquedim
Tested against Windows / Python 3.11 / Anaconda
Cython (and a C/C++ compiler) must be installed
This module provides functions for working with multi-dimensional arrays and performing operations such as grouping rows with the same values, compressing and decompressing arrays, and finding unique dimensions in multi-dimensional arrays.
FUNCTIONS
compress_rows_as_list(a, bitshift_dtype=None)
Compress rows of a 2D numpy array into a list of integers using bit shifting.
Args:
a (numpy.ndarray): The input 2D array.
bitshift_dtype (numpy.dtype, optional): The data type for bit shifting. Defaults to None (will find the fastest).
Returns:
Tuple[List[mpz], int, Tuple[int, int]]: A tuple containing the compressed list of integers,
the bitshift value used, and the shape of the input array.
group_same_rows_as_dict(a, bitshift_dtype=None, fullkeys=True)
Group rows with the same values in a 2D numpy array and return the result as a dictionary.
Args:
a (numpy.ndarray): The input 2D array.
bitshift_dtype (numpy.dtype, optional): The data type for bit shifting. Defaults to None (will find the fastest).
fullkeys (bool, optional): If True, uses full keys (mpz) in the result dictionary.
If False, uses integer keys. Defaults to True.
Returns:
Tuple[Dict[Union[int, mpz], List[int]], int, Tuple[int, int]]: A tuple containing the result
dictionary, the bitshift value used, and the shape of the input array.
uncompress_list(mpz_list, usedbitshift, elements_per_row, numpy_dtype=None)
Decompress a list of integers into a 2D numpy array.
Args:
mpz_list (List[mpz]): The compressed list of integers.
usedbitshift (int): The bitshift value used during compression.
elements_per_row (int): The number of elements per row in the original array.
numpy_dtype (numpy.dtype, optional): The desired data type of the output array. Defaults to None.
Returns:
numpy.ndarray: The decompressed 2D numpy array.
unique_dimensions(a, last_dim, unordered=True, iterray=())
Find unique dimensions in a multi-dimensional numpy array.
Args:
a (numpy.ndarray): The input multi-dimensional array.
last_dim (int): The last dimension to consider when finding unique dimensions.
unordered (bool, optional): If True, uses multiprocessing to create the index. Defaults to True.
iterray (Any, optional): Custom iterator array. Defaults to an empty tuple.
Returns:
numpy.ndarray: The array containing unique dimensions based on the specified criteria.
import numpy as np
from cythonuniquedim import group_same_rows_as_dict, compress_rows_as_list, uncompress_list, unique_dimensions
shaha = (3, 5)
dtype = np.uint8
b = np.arange(np.product(shaha), dtype=dtype)
a = b.reshape(shaha)
a = np.tile(a, 3).T
acp = a.copy()
resultdict0, usedbitshift0, arrayviewshape0 = group_same_rows_as_dict(a, bitshift_dtype=None, fullkeys=True)
resultdict1, usedbitshift1, arrayviewshape1 = group_same_rows_as_dict(a, bitshift_dtype=None, fullkeys=False)
print(f'{resultdict0,usedbitshift0,arrayviewshape0=}')
print(f'{resultdict1,usedbitshift1,arrayviewshape1=}')
mpz_list100, mpz_list_usedbitshift100, arrayviewshape100 = compress_rows_as_list(a, bitshift_dtype=None, )
mpz_list111, mpz_list_usedbitshift111, arrayviewshape111 = compress_rows_as_list(a, bitshift_dtype=np.uint8, )
print(f'{mpz_list100,mpz_list_usedbitshift100,arrayviewshape100=}')
print(f'{mpz_list111,mpz_list_usedbitshift111,arrayviewshape111=}')
unclist = (
uncompress_list(mpz_list=mpz_list111, usedbitshift=mpz_list_usedbitshift111, elements_per_row=arrayviewshape111[1],
numpy_dtype=np.uint32))
print(f'{unclist=}')
# resultdict0,usedbitshift0,arrayviewshape0=({mpz(656640): [0, 5, 10], mpz(722433): [1, 6, 11], mpz(788226): [2, 7, 12], mpz(854019): [3, 8, 13], mpz(919812): [4, 9, 14]}, 256, (15, 3))
# resultdict1,usedbitshift1,arrayviewshape1=({0: [0, 5, 10], 1: [1, 6, 11], 2: [2, 7, 12], 3: [3, 8, 13], 4: [4, 9, 14]}, 256, (15, 3))
# mpz_list100,mpz_list_usedbitshift100,arrayviewshape100=([mpz(656640), mpz(722433), mpz(788226), mpz(854019), mpz(919812), mpz(656640), mpz(722433), mpz(788226), mpz(854019), mpz(919812), mpz(656640), mpz(722433), mpz(788226), mpz(854019), mpz(919812)], 256, (15, 3))
# mpz_list111,mpz_list_usedbitshift111,arrayviewshape111=([mpz(656640), mpz(722433), mpz(788226), mpz(854019), mpz(919812), mpz(656640), mpz(722433), mpz(788226), mpz(854019), mpz(919812), mpz(656640), mpz(722433), mpz(788226), mpz(854019), mpz(919812)], 256, (15, 3))
# unclist=array([[ 0, 5, 10],
# [ 1, 6, 11],
# [ 2, 7, 12],
# [ 3, 8, 13],
# [ 4, 9, 14],
# [ 0, 5, 10],
# [ 1, 6, 11],
# [ 2, 7, 12],
# [ 3, 8, 13],
# [ 4, 9, 14],
# [ 0, 5, 10],
# [ 1, 6, 11],
# [ 2, 7, 12],
# [ 3, 8, 13],
# [ 4, 9, 14]], dtype=uint32)
shaha = (4, 3, 4, 3, 3, 2, 3)
dtype = np.float64
b = np.arange(np.product(shaha), dtype=dtype)
a = b.reshape(shaha)
a = np.tile(a, 3).T.copy()
unidims = unique_dimensions(a, last_dim=3, unordered=True)
print(f'{unidims=}')
print(f'{unidims.shape=}')
unidims1 = unique_dimensions(a, last_dim=4, unordered=True)
print(f'{unidims1=}')
print(f'{unidims1.shape=}')
unidims2 = unique_dimensions(a, last_dim=5, unordered=True)
print(f'{unidims2=}')
print(f'{unidims2.shape=}')
unidims3 = unique_dimensions(a, last_dim=6, unordered=True)
print(f'{unidims3=}')
print(f'{unidims3.shape=}')
# unidims=array([[[[[[0.000e+00, 6.480e+02, 1.296e+03, 1.944e+03],
# [2.160e+02, 8.640e+02, 1.512e+03, 2.160e+03],
# [4.320e+02, 1.080e+03, 1.728e+03, 2.376e+03]],
# [[5.400e+01, 7.020e+02, 1.350e+03, 1.998e+03],
# [2.700e+02, 9.180e+02, 1.566e+03, 2.214e+03],
# [4.860e+02, 1.134e+03, 1.782e+03, 2.430e+03]],
# [[1.080e+02, 7.560e+02, 1.404e+03, 2.052e+03],
# [3.240e+02, 9.720e+02, 1.620e+03, 2.268e+03],
# [5.400e+02, 1.188e+03, 1.836e+03, 2.484e+03]],
# [[1.620e+02, 8.100e+02, 1.458e+03, 2.106e+03],
# [3.780e+02, 1.026e+03, 1.674e+03, 2.322e+03],
# [5.940e+02, 1.242e+03, 1.890e+03, 2.538e+03]]],
# [[[1.800e+01, 6.660e+02, 1.314e+03, 1.962e+03],
# [2.340e+02, 8.820e+02, 1.530e+03, 2.178e+03],
# [4.500e+02, 1.098e+03, 1.746e+03, 2.394e+03]],
# [[7.200e+01, 7.200e+02, 1.368e+03, 2.016e+03],
# [2.880e+02, 9.360e+02, 1.584e+03, 2.232e+03],
# [5.040e+02, 1.152e+03, 1.800e+03, 2.448e+03]],
# [[1.260e+02, 7.740e+02, 1.422e+03, 2.070e+03],
# [3.420e+02, 9.900e+02, 1.638e+03, 2.286e+03],
# [5.580e+02, 1.206e+03, 1.854e+03, 2.502e+03]],
# [[1.800e+02, 8.280e+02, 1.476e+03, 2.124e+03],
# [3.960e+02, 1.044e+03, 1.692e+03, 2.340e+03],
# [6.120e+02, 1.260e+03, 1.908e+03, 2.556e+03]]],
# ......
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cythonuniquedim-0.10.tar.gz.
File metadata
- Download URL: cythonuniquedim-0.10.tar.gz
- Upload date:
- Size: 79.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c8b8ad53f5e1b23c115165d5d6f681a2ee8db60b1155b4553435ca16d2d8bcd4
|
|
| MD5 |
614818e8457ccc90f844acfd83e61119
|
|
| BLAKE2b-256 |
816234e439eadfbfcb6bbb016e6c6073fa1fd7aac55b4cafae6a0b9d70aff6dd
|
File details
Details for the file cythonuniquedim-0.10-py3-none-any.whl.
File metadata
- Download URL: cythonuniquedim-0.10-py3-none-any.whl
- Upload date:
- Size: 81.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d585e50c5655d8009cc127ccfc26cab2a31bf2258c31f8efb53c64153b5c89f2
|
|
| MD5 |
0f8a15a4e972e0b358d1cb2d2db53671
|
|
| BLAKE2b-256 |
7ec9c2ed85ab27102df732288960fe4203433b212554bfe563504802b58a0811
|