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