【发布时间】:2013-07-03 19:00:24
【问题描述】:
我在 Python 2.7 中运行 Numpy 1.6,并且有一些我从另一个模块获得的一维数组。我想把这些数组打包成一个结构化数组,这样我就可以按名称索引原始的一维数组。我无法弄清楚如何将 1D 数组转换为 2D 数组并使 dtype 访问正确的数据。我的 MWE 如下:
>>> 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 数组。有没有办法做到这一点,还是我错了?
【问题讨论】:
-
需要对二维数组进行操作吗?为什么不直接使用字典?
-
我想我只是假设最好不要混合数据类型并使用 ndarray,因为它支持类似 dict 的索引,但背后没有真正合理的推理。
-
回答第一个问题,不,在这种情况下我不需要对二维数组进行操作。