我有一个叫做边的一维数组(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(顶点,边)但它不适用于多维数组。
答案 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
base
为None
的事实意味着不生成视图,它会生成矩阵的副本(带有已过滤/重新排序的行)。您之后对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. ]])