我嘗試創建一個空陣列,我可以在其中添加其他陣列并獲得一個矩陣:
arr = np.array([])
arr = np.append(arr, [1, 2])
arr = np.append(arr, [3, 4])
結果,我得到一個一維陣列:
array([1., 2., 3., 4.])
預期結果:
array([[1., 2.], [3., 4.]])
我嘗試將陣列初始化為多維陣列arr = np.array([[]]),而不是追加陣列,而是連接陣列arr = np.concatenate((arr, [1, 2]), axis=0)。兩個選項都不起作用,結果又是一個一維陣列。
那么,解決此問題并獲得二維陣列的最佳方法是什么?
uj5u.com熱心網友回復:
收集串列中的串列,最后做一個陣列構造:
In [687]: alist = []
...: alist.append([1,2])
...: alist.append([3,4])
...: arr = np.array(alist)
In [688]: alist
Out[688]: [[1, 2], [3, 4]]
In [689]: arr
Out[689]:
array([[1, 2],
[3, 4]])
重復np.append且np.concatenate效率低下,并且難以正確。
為什么你對你得到一個一維陣列感到驚訝。你跳過了np.append檔案嗎?沒有axis它就是這樣做的。有了axis它就可以了np.concatenate。正如您發現的那樣concatenate,它對尺寸很挑剔。您可以在軸 0 上連接 (0,2) 和 (1,2),但不能連接 (1,0) 和 (2,)。
用陣列模仿串列方法是行不通的——除非你仔細閱讀檔案。
“空陣列”是一個模棱兩可的短語。 np.empty((1000,20,30))產生大量的“任意”值。 np.array([])制作一個形狀為 (0,) 的 float dtype 陣列。它有 0 個元素,但形狀為 (10,0,1000) 的陣列也是如此。串列本質上是一維的;陣列同時具有形狀和資料型別。
uj5u.com熱心網友回復:
您需要從具有正確維度的陣列開始,并使用相同的維度追加。您還需要注意您是附加行還是列,否則np.append會將結果展平為一維陣列。由于您是從一個空陣列開始的,因此您需要使用一個函式來指定創建時的形狀。然后將新行包裝在外部串列中,使它們成為 2d。
>>> arr=np.zeros((0,2), dtype=int)
>>> arr = np.append(arr, [[1,2]], axis=0)
>>> arr = np.append(arr, [[3,4]], axis=0)
>>> arr
array([[1, 2],
[3, 4]])
作為旁注,每個追加都會復制陣列,隨著陣列的增長,它會變得越來越昂貴。如果您使用 append 逐行創建一個大陣列,您應該考慮替代方法。
uj5u.com熱心網友回復:
Numpy 陣列具有固定大小。因此,將值附加到陣列是不可能的。
有多種方法可以實作您的目標。其中最簡單的可能就是使用以下np.array方法:
np.array([[1., 2.], [3., 4.]])
您還可以創建一個包含所有零的所需大小的新陣列,np.zeros()然后將值復制到這個新陣列中,如下所示:1
arr = np.zeros((2, 2))
arr[0, :] = [1, 2]
arr[1, :] = [3, 4]
或者您可以使用以下方法堆疊行陣列np.stack:
np.stack([[1, 2], [3, 4]])
編輯
如果您在創建時不知道陣列所需的大小,您可以創建一個二維陣列并使用它np.append來創建初始陣列的副本并附加新值:
arr = np.zeros((0, 2)) # Create an empty array with a row length of 2
arr = np.append(arr, [[1, 2]], axis=0)
arr = np.append(arr, [[3, 4]], axis=0)
雙方括號很重要,因為這使陣列成為二維的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/537346.html
標籤:Python数组麻木的
