Меня интересует использование множества массивов несколько неоднородных типов данных. Поскольку numpy указывает, что данные должны быть однородными, это может быть достигнуто путем определения супер-dtype, который действует как оболочка объединения для всех подтипов. Затем доступ к полям подтипов дает другую интерпретацию базовых данных.
Для этого уже есть кое-что, например
dtype(('|S2', [('x', '|i1'), ('y', '|i1')]))
Относится к массиву двухбайтовых строк, но первый и второй байты также могут интерпретироваться как целые числа через имена полей «x» и «y». Однако я не могу понять, как присвоить метку поля двухбайтовой строке.
Можно ли сделать это более общим, чтобы мы могли накладывать на данные любое количество различных спецификаций полей?
Моя первая попытка заключалась в том, чтобы указать смещения полей в dtype, но это не удалось из-за жалобы на то, что смещения должны быть упорядочены (т.е. неперекрывающиеся данные).
dtype1 = np.dtype(dict(
names=['a','b'],
formats=['|a2','<i2'],
offsets=[0,0]))
Другой способ работает, но он громоздкий. В этом методе я могу определить несколько переменных как представление для одних и тех же базовых данных и изменить dtype разных переменных, чтобы позволить мне получить доступ к данным в разных форматах, т.е.
a=np.zeros(3, dtype='<a2')
b=a[:]
b.dtype='<i2'
Это позволяет мне получать доступ к данным в виде строк или целых чисел в зависимости от того, смотрю я на a или b. Но это громоздкий способ манипулировать данными. В идеале я хотел бы иметь возможность указывать множество разных полей с произвольными смещениями. Есть какой-либо способ сделать это?
1 ответ
Типы объединения разрешены с июня 2011 г .: https://github.com/numpy/numpy/pull/ 94
Вам нужно будет перейти на NumPy 1.7.x, чтобы использовать это.
Однако в предыдущих версиях вы можете использовать конструктор оверлея dtype:
>>> a = np.zeros(3, dtype=np.dtype(('<i2', [('a', '|a2')])))
>>> a[0] = 0x3456
>>> a['a'][0]
'V4'
Это задокументировано на странице http. : //docs.scipy.org/doc/numpy-dev/reference/arrays.dtypes.html#specifying-and-constructing-data-types (найдите (base_dtype, new_dtype)
).
Похожие вопросы
Новые вопросы
numpy
NumPy - это расширение языка Python, которое добавляет поддержку больших многомерных массивов и матриц, а также большую библиотеку высокоуровневых математических функций для операций с этими массивами.