[英]Initialise a numpy array of a specific shape
我想初始化一個特定形狀的 numpy 數組,這樣當我向它添加數字時,它就會“填滿”那個形狀。
數組的長度會有所不同 - 這很好,我不介意它有多長 - 但我希望它有 4 列。 理想情況下類似於以下內容:
array = np.array([:, 4])
print(array)
array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
同樣,數組的實際長度不會被定義。 這樣,如果我要附加一個不同的數組,它將按如下方式工作
test_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
array = np.append(array, test_array)
print(array)
array = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
有沒有辦法做到這一點?
如果我很理解你的問題,我認為你不需要初始化你的數組。 您應該首先檢查您的數組大小是否除以 4。
import numpy as np
l = test_array.shape[0]
cols = 4
rows = l / cols
my_array = np.reshape(test_array, (rows, cols))
你所尋求的行為是不尋常的。 你應該解釋你為什么需要它。 如果你想要一些容易增長的東西,請使用 Python list
。 numpy
數組具有固定大小。 可以通過多種方式將值分配給數組,但要增加它,您需要使用某種版本的concatenate
創建一個新數組。 (是的,有一個resize
函數/方法,但不常用。)
我將說明值分配選項:
初始化一個已知大小的數組。 在您的情況下,5 可能比預期的要大,而 4 是所需的“列”數。
In [1]: arr = np.zeros((5,4), dtype=int)
In [2]: arr
Out[2]:
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
為一行分配 4 個值:
In [3]: arr[0] = [1,2,3,4]
從數組的平面視圖中的給定點開始分配 3 個值:
In [4]: arr.flat[4:7] = [1,2,3]
In [5]: arr
Out[5]:
array([[1, 2, 3, 4],
[1, 2, 3, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
該數組雖然定義為 (5,4) 形狀,但可以視為 (20,) 一維數組。 我必須在平面視圖中選擇合適的切片值。
更常見的是,我們將值分配給一個行塊(或各種其他索引區域)。 arr[2:, :]
是arr
的 (3,4) 部分。 所以我們需要為其分配 (3,4) 數組(或等效的列表結構)。 要充分利用此類作業,您需要閱讀broadcasting
。
In [6]: arr[2:,:] = np.reshape(list(range(10,22)),(3,4))
In [7]: arr
Out[7]:
array([[ 1, 2, 3, 4],
[ 1, 2, 3, 0],
[10, 11, 12, 13],
[14, 15, 16, 17],
[18, 19, 20, 21]])
In [8]: arr.ravel()
Out[8]:
array([ 1, 2, 3, 4, 1, 2, 3, 0, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.