我在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