簡體   English   中英

Numpy append 二維數組 for 循環遍歷行

[英]Numpy append 2D array in for loop over rows

我想 append 在 for 循環中垂直創建一個二維數組。
我嘗試了 append 方法,但這不會垂直堆疊(我不想避免稍后重新調整結果),我嘗試了 vstack() function,但這不適用於空數組。 有誰知道如何解決這個問題?

import numpy as np
mat = np.array([])
for i in np.arange(3):
    val = np.random.rand(2, 2)
    mat = np.append(mat,val)

我可以想到以下解決方案:

for i in np.arange(3):
    val = np.random.rand(2, 2)
    if i==0:
        mat = val
    else:
        mat = np.vstack((mat,val))

有沒有一種解決方案,我只需 append 值“val”而不指定額外的 if-else 語句?

使用 np.empty 初始化一個空數組並定義您想要 append 跨越的軸:

import numpy as np
mat = np.empty((0,2))
for i in np.arange(3):
    val = np.random.rand(2, 2)
    mat = np.append(mat,val, axis=0)
print(mat)

Output:

[[0.08527627 0.40567273]
 [0.39701354 0.72642426]
 [0.17540761 0.02579183]
 [0.76271521 0.83032347]
 [0.08105248 0.67986726]
 [0.48079453 0.37454798]]

但是,正如我的評論中所述,如果您需要 append 很多次,您應該考慮初始化正確大小的數組,然后使用 np.append() 分配值或附加到列表中(如果您不知道數組的大小),然后在之后創建一個 numpy 數組

另一種方法是使用 * 運算符。 請注意,即使您不使用 Numpy,您也可以這樣做

mat = []
for i in np.arange(3):
    if len(mat) == 0:
        mat = np.random.rand(2, 2)
    else:
        mat = [*mat, *np.random.rand(2, 2)] 
# And in case you need it back as a 2D list and not numpy arrays   
mat = [list(element) for element in mat]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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