<p>正如所指出的,这将很快爆发。但是,您可以使用笛卡尔积迭代器:</p>
<pre><code>import itertools
import numpy as np
# Create a list with ranges:
rngs=np.array([p,q,..,z])
#Initialize X empty
X = np.empty((rngs.prod(), A.shape[0]))
#Cycle over all cartesian products
for i,t in enumerate(itertools.product(*[range(i) for i in rngs])):
X[i,:] = sum([A[i,:] * t[i] for i in range(len(t))])
</code></pre>
<p>试验数据:</p>
<pre><code>A = np.random.randint(10, size=(10, 10))
A
array([[8, 5, 0, 2, 0, 4, 5, 5, 0, 9],
[7, 0, 5, 9, 9, 4, 8, 2, 6, 8],
[4, 3, 8, 5, 2, 5, 4, 8, 6, 1],
[0, 5, 6, 5, 5, 0, 8, 5, 4, 9],
[3, 3, 2, 6, 6, 9, 7, 7, 3, 3],
[4, 0, 7, 2, 3, 2, 2, 4, 1, 2],
[6, 2, 5, 9, 9, 9, 4, 7, 7, 3],
[6, 3, 4, 9, 0, 3, 8, 1, 6, 8],
[6, 5, 6, 0, 8, 7, 9, 0, 7, 4],
[2, 1, 4, 1, 3, 8, 3, 3, 2, 9]])
rngs = np.random.randint(1, 5, size=10)
rngs
array([4, 2, 1, 2, 2, 3, 4, 4, 2, 4])
X = np.empty((rngs.prod(), A.shape[0]))
for i,t in enumerate(itertools.product(*[range(i) for i in rngs])):
X[i,:] = sum([A[i,:] * t[i] for i in range(len(t))])
X
array([[ 0., 0., 0., ..., 0., 0., 0.],
[ 2., 1., 4., ..., 3., 2., 9.],
[ 4., 2., 8., ..., 6., 4., 18.],
...,
[ 86., 44., 64., ..., 64., 63., 97.],
[ 88., 45., 68., ..., 67., 65., 106.],
[ 90., 46., 72., ..., 70., 67., 115.]])
</code></pre>