创建3D向量数组,其中每个向量的每个元素都在给定范围内

时间:2019-08-27 10:34:45

标签: arrays numpy vector

我正在尝试实现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]

1 个答案:

答案 0 :(得分:2)

使用ab,我们可以制作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]])