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

2024-04-25 17:56:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个一维数组(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公司(顶点、边)但它不适用于多维数组。你知道吗


Tags: np公司数组resulttake顶点verticesedges
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.   ]])

您只需在此处使用索引

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之前进行了复制)。你知道吗

相关问题 更多 >