I have a set of N
arrays and I need to compute the N-fold
Cartesian product.
Of all the generated ordered tuples I want to keep only the ones whose sum is equal to 1 (plus or minus a certain tolerance), e.g.
p = [[0.4,0.389],
[0.6,0.611]]
cartesian_product = [[0.4, 0.6],
[0.4, 0.611],
[0.389, 0.6],
[0.389, 0.611]]
filtered_cartesian_product = [[0.4, 0.6],
[0.389, 0.611]]
I solved this problem in Python using Itertools' Product()
np.array([i for i in itertools.product(*p) if np.abs(np.sum(i)-1)<1e-4])
which works quite well. However, since I need to perform this task on a relatively big dataset (100 arrays with 100 entries each), speed and good memory management are crucial.
Could anyone suggest me a faster solution (not necessarily in Python)?