У меня есть гибкий массив типов, такой, что первый столбец - это номер узла, а следующие три - трехмерные координаты, подобные этой 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')])
Теперь я хотел бы получить вектор, который является суммой каждого столбца для 'x', 'y' и 'z'. Наивно это было бы что-то вроде: 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')])