我在Python 2.7中运行Numpy 1.6,并且从一个模块中获得了一些1D数组。我想采取这些数组并将它们打包到一个结构化数组中,这样我就可以按名称对原始1D数组进行索引。我无法弄清楚如何将一维数组转换为二维数组,并使dtype访问正确的数据。我MWE如下:numpy将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