Я искренне удивлен, что это никогда не встречалось в моем собственном коде, но оказывается, что структурированные массивы Numpy (т.е. массивы с именами полей) не поддерживают стандартные арифметические операторы +
, -
, *
или /
(см. Сноску *).
Таким образом, ваш единственный вариант - работать с неструктурированной версией вашего массива. Комментарий @ hpaulj указывает, как вы можете это сделать ( этот старый ответ содержит подробное исследование того, как именно вы можете получить дополнение для работы со структурированными массивами.). Либо индексировать отдельное поле (результат которого ведет себя как стандартный массив), и умножить это:
import numpy as np
from io import StringIO
csv = '''col_a\tcol_b\tcol_c
5.0\t19.6\t22.8
6.0\t42.42\t39.208
'''
arr = np.genfromtxt(StringIO(csv), dtype=np.float64, delimiter='\t', names=True)
xcol_a = arr['col_a']*4
print(xcol_a)
# output: [20. 24.]
или пропустите names=True
kwarg при создании массива (что заставляет np.genfromtxt
возвращать стандартный массив вместо структурированного):
arrstd = np.genfromtxt(StringIO(csv), dtype=np.float64, delimiter='\t', skip_header=True)
print(arrstd*4)
# output: [[ 20. 78.4 91.2 ]
# [ 24. 169.68 156.832]]
*: Технически представляется, что многие встроенные в Numpy ufunc
не поддерживаются при работе со структурированными массивами. По крайней мере, некоторые из функций / операторов сравнения (<
, >
и ==
) поддерживаются .