使用numpy take函数获得多个维度

时间:2017-06-13 21:05:06

标签: python arrays numpy

我有一个叫做边的一维数组(n),想要通过顶点数组(n,3)中的索引插入值

vertices = [[ 1.25, 4.321, -4], [2, -5, 3.32], [23.3, 43, 12], [32, 4, -23]]

edges = [1, 3, 2, 0]


result = [[2, -5, 3.32], [32, 4, -23], [23.3, 43, 12], [ 1.25, 4.321, -4]]

我尝试了np.take(顶点,边)但它不适用于多维数组。

2 个答案:

答案 0 :(得分:2)

您可以在此处使用索引

vertices[edges]
#       ^     ^ indexing

如果使用列表进行索引,则numpy将重新调整原始矩阵,以使此处的最高维度遵循edges指定的索引。

像:

>>> vertices = np.array([[ 1.25, 4.321, -4], [2, -5, 3.32], [23.3, 43, 12], [32, 4, -23]])
>>> edges = [1, 3, 2, 0]
>>> vertices[edges]
array([[  2.   ,  -5.   ,   3.32 ],
       [ 32.   ,   4.   , -23.   ],
       [ 23.3  ,  43.   ,  12.   ],
       [  1.25 ,   4.321,  -4.   ]])
>>> vertices[edges].base is None
True

baseNone的事实意味着不生成视图,它会生成矩阵的副本(带有已过滤/重新排序的行)。您之后对vertices元素所做的更改不会更改vertices[edges]结果的元素(假设您在更改vertices之前制作副本)。

答案 1 :(得分:2)

带参数的

take

In [313]: vertices=np.array(vertices)
In [314]: edges=[1,3,2,0]
In [315]: np.take(vertices, edges,0)
Out[315]: 
array([[  2.   ,  -5.   ,   3.32 ],
       [ 32.   ,   4.   , -23.   ],
       [ 23.3  ,  43.   ,  12.   ],
       [  1.25 ,   4.321,  -4.   ]])
In [316]: vertices[edges,:]
Out[316]: 
array([[  2.   ,  -5.   ,   3.32 ],
       [ 32.   ,   4.   , -23.   ],
       [ 23.3  ,  43.   ,  12.   ],
       [  1.25 ,   4.321,  -4.   ]])
相关问题