array of tuples
可以有幾個含義。
雙迭代產生的元組的嵌套列表:
In [292]: alist = [[(i,j) for j in y] for i in x]
In [293]: alist
Out[293]:
[[(0, 0), (0, 1), (0, 2), (0, 3)],
[(1, 0), (1, 1), (1, 2), (1, 3)],
[(2, 0), (2, 1), (2, 2), (2, 3)],
[(3, 0), (3, 1), (3, 2), (3, 3)]]
從此形成陣列的默認方式產生含有一個三維陣列整數元素
In [294]: arr=np.array(alist)
In [295]: arr.dtype
Out[295]: dtype('int32')
In [296]: arr.shape
Out[296]: (4, 4, 2)
In [297]: arr[0,0]
Out[297]: array([0, 0])
定義的化合物D型創建一個結構化陣列:
In [298]: arr=np.array(alist,'i,i')
In [299]: arr.dtype
Out[299]: dtype([('f0', '<i4'), ('f1', '<i4')])
In [300]: arr.shape
Out[300]: (4, 4)
In [301]: arr
Out[301]:
array([[(0, 0), (0, 1), (0, 2), (0, 3)],
[(1, 0), (1, 1), (1, 2), (1, 3)],
[(2, 0), (2, 1), (2, 2), (2, 3)],
[(3, 0), (3, 1), (3, 2), (3, 3)]],
dtype=[('f0', '<i4'), ('f1', '<i4')])
arr.tolist()
看起來就像alist
。
這種陣列的一個元素不是一個元組,但它確實顯示爲這樣。我更喜歡稱它爲一個記錄。
In [303]: type(arr[0,0])
Out[303]: numpy.void
In [304]: arr[0,0]
Out[304]: (0, 0)
這些記錄的2個元素是字段,可以通過名稱來訪問,例如, arr['f0'], arr['f1']
,它們都是2d整型數組。
,能夠創建一個對象陣列,它可以包含文字的元組(實際上指針到元組別處存儲:
In [305]: arr = np.empty((4,4),object)
In [306]: arr
Out[306]:
array([[None, None, None, None],
[None, None, None, None],
[None, None, None, None],
[None, None, None, None]], dtype=object)
In [307]: arr[...]=alist
In [308]: arr
Out[308]:
array([[(0, 0), (0, 1), (0, 2), (0, 3)],
[(1, 0), (1, 1), (1, 2), (1, 3)],
[(2, 0), (2, 1), (2, 2), (2, 3)],
[(3, 0), (3, 1), (3, 2), (3, 3)]], dtype=object)
In [309]: type(arr[0,0])
Out[309]: tuple
從這些X,Y構成的陣列的非迭代的方式變量是meshgrid
,它返回(4,4)數組的列表。
In [322]: I,J = np.meshgrid(x,y,indexing='ij')
In [323]: np.allclose(np.stack((I,J),axis=2), np.array(alist))
Out[323]: True
我們可以從這些以及構建記錄陣列:在該(4,4,2)陣列相匹配的方式,他們可以「堆疊」
In [327]: arr = np.zeros((4,4),'i,i')
In [328]: arr['f0']=I
In [329]: arr['f1']=J
@ inspectorG4dget:請仔細閱讀我的問題!我補充了一點,其中的區別在於所假設的重複問題。請取消標記問題。 – Make42
你可以在每個元素上調用'tuple(...)'。兩個問題的計算方面(你正在尋找一個笛卡爾積)是非常相似的,我仍然認爲這兩個帖子是重複的。如果你還有其他感覺,那麼請標誌主持人的注意力,這樣比我更聰明的人可以在這裏權衡 – inspectorG4dget
在轉換成數組之後,你不能在每個元素上調用'tuple(...)',因爲信息,什麼元素被(元組)丟失了。 – Make42