Я запускаю Numpy 1.6 в Python 2.7 и имею несколько 1D массивов, которые я получаю из другого модуля. Я хотел бы взять эти массивы и упаковать их в структурированный массив, чтобы я мог индексировать оригинальные массивы 1D по имени. У меня возникли проблемы с выяснением того, как получить 1D-массивы в 2D-массив и заставить dtype получить доступ к правильным данным. Мой MWE выглядит следующим образом:numpy Stacking 1D массивы в структурированный массив
>>> import numpy as np
>>>
>>> x = np.random.randint(10,size=3)
>>> y = np.random.randint(10,size=3)
>>> z = np.random.randint(10,size=3)
>>> x
array([9, 4, 7])
>>> y
array([5, 8, 0])
>>> z
array([2, 3, 6])
>>>
>>> w = np.array([x,y,z])
>>> w.dtype=[('x','i4'),('y','i4'),('z','i4')]
>>> w
array([[(9, 4, 7)],
[(5, 8, 0)],
[(2, 3, 6)]],
dtype=[('x', '<i4'), ('y', '<i4'), ('z', '<i4')])
>>> w['x']
array([[9],
[5],
[2]])
>>>
>>> u = np.vstack((x,y,z))
>>> u.dtype=[('x','i4'),('y','i4'),('z','i4')]
>>> u
array([[(9, 4, 7)],
[(5, 8, 0)],
[(2, 3, 6)]],
dtype=[('x', '<i4'), ('y', '<i4'), ('z', '<i4')])
>>> u['x']
array([[9],
[5],
[2]])
>>> v = np.column_stack((x,y,z))
>>> v
array([[(9, 4, 7), (5, 8, 0), (2, 3, 6)]],
dtype=[('x', '<i4'), ('y', '<i4'), ('z', '<i4')])
>>> v.dtype=[('x','i4'),('y','i4'),('z','i4')]
>>> v['x']
array([[9, 5, 2]])
Как вы можете видеть, в то время как мой оригинальный x
массив содержит [9,4,7]
, никоим образом я пытался не складывать массивы, а затем индекс по 'x'
возвращает оригинал x
массива. Есть ли способ сделать это, или я не ошибаюсь?
Нужно ли работать с массивом 2d? Почему бы просто не использовать словарь? – OregonTrail
Я предполагаю, что я просто предположил, что было бы лучше не смешивать типы данных и использовать ndarray, поскольку он поддерживает индексирование с типом, но нет никаких реальных обоснований звука. – Thav
Чтобы ответить на первый вопрос, нет, в этом случае мне не нужно работать с массивом 2d. – Thav