我有一个灵活的类型数组,第一列是节点编号,接下来的三个是3D坐标,如M=np.array([(0,1.1,2.1,3.1),(1,4,5,6),(2,10,11,12)],dtype=[('N','i4'),('x','f8'),('y','f8'),('z','f8')])
:
>>> array([(0, 1.1, 2.1, 3.1),
(1, 4. , 5. , 6. ),
(2, 10. , 11. , 12. )],
dtype=[('N', '<i4'), ('x', '<f8'), ('y', '<f8'), ('z', '<f8')])
现在我想得到一个向量,它是&#39; x&#39;,&#39; y&#39;的每一列的总和。和&#39; z&#39;。天真地类似于:M[['x','y','z']].sum()
,但会出现错误:TypeError: cannot perform reduce with flexible type
我的实际例子稍微复杂一点,因为我有一个带节点的元素列表:E=np.array([[0,1],[1,2]])
我想要的是每个元素的节点坐标之和。我可以针对每个维度执行此操作:M[E]['x'].sum(axis=0)
,其中包含array([5.1,14])
。
有没有办法在同一类型的所有维度上进行,以便最终得到与M=np.array([(5.1,7.1,9.1),(14,16,18),],dtype=[('x','f8'),('y','f8'),('z','f8')])
相同的结果,即
array([( 5.1, 7.1, 9.1),
(14. , 16. , 18. )],
dtype=[('x', '<f8'), ('y', '<f8'), ('z', '<f8')])