簡體   English   中英

初始化特定形狀的 numpy 數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM