NumPy массив как тип данных в структурированном массиве?
Мне было интересно, возможно ли иметь numpy.array в качестве типа данных в структурированном массиве. Это идея:
import numpy
raw_data = [(1, numpy.array([1,2,3])),
(2, numpy.array([4,5,6])),
(3, numpy.array([7,8,9]))]
data = numpy.array(raw_data, dtype=[('num', float),
('arr', numpy.array)])
У меня есть список кортежей, состоящий из целого числа и массива, и я хотел бы превратить его в структурированный массив. Сейчас Python жалуется, что не понимает тип данных numpy.array. Есть ли другой способ ссылки на тип данных массива?
Мотивация заключается в том, чтобы иметь возможность делать такие вещи, как:
print numpy.min(data['arr'], axis=0)
print numpy.min(data['arr'], axis=1)
и другие операции.
1 ответ
Решение
Да, вы можете создавать составные поля, которые выглядят как массивы в структурированном массиве; например:
import numpy as np
raw_data = [(1, np.array([1,2,3])),
(2, np.array([4,5,6])),
(3, np.array([7,8,9]))]
tp = np.dtype([('id', int), ('arr', float, (3,))])
x = np.array(raw_data, dtype=tp)
Результат выглядит так:
>>> x
array([(1, [1.0, 2.0, 3.0]), (2, [4.0, 5.0, 6.0]), (3, [7.0, 8.0, 9.0])],
dtype=[('id', '<i8'), ('arr', '<f8', (3,))])