我正在尝试实现3D向量数组。所有向量都是元素范围的组合。我的意思是:
array = [v_1, v_2, v_3,....]
v_j = [x_1, x_2, x_3] with x_i in [a, b].
对我来说重要的是,我想拥有所有可能的组合。
例如,让a = 1,b =10。那么它应该类似于:
v_1 = [1, 1, 1], v_2 = [1, 1, 2],...v_10 = [1, 1, 10]
,然后下一个应该是:
v_11 = [1, 2, 1], v_12 = [1, 2, 2]....
我通过使用linspace进行了尝试,但是我只得到了每个元素相等的向量,即
v_1 = [1, 1, 1], v_2 = [2, 2, 2]....
是否有一种简单的方法可以做到这一点,或者我必须通过很多循环来做到这一点。
我的linspace示例是:
ffac = np.linspace(-1E-3, 1E-3, 100, endpoint=True)
for i in range(100):
eps = np.ones(shape=[100, ]) * ffac[i]
答案 0 :(得分:2)
使用a
和b
,我们可以制作np.arange(a, b+1)
,然后使用np.meshgrid
:
xij = np.arange(a, b+1)
np.transpose(np.meshgrid(xij, xij, xij), (2,1,3,0))
对于b=2
,我们获得:
>>> np.transpose(np.meshgrid(xij, xij, xij), (2,1,3,0))
array([[[[1, 1, 1],
[1, 1, 2]],
[[1, 2, 1],
[1, 2, 2]]],
[[[2, 1, 1],
[2, 1, 2]],
[[2, 2, 1],
[2, 2, 2]]]])
对于具有 n 个选项的向量,结果为 n×n×n×3 。
或者如果您想展平它:
>>> np.transpose(np.meshgrid(xij, xij, xij), (2,1,3,0)).reshape(-1, 3)
array([[1, 1, 1],
[1, 1, 2],
[1, 2, 1],
[1, 2, 2],
[2, 1, 1],
[2, 1, 2],
[2, 2, 1],
[2, 2, 2]])