[英]How to append arrays to another numpy array?
我正在嘗試使用 numpy 遍歷一組坐標並將這些坐標數組“堆疊”到另一個數組(所以本質上我想要一個數組數組)。
這是我的嘗試:
import numpy as np
all_coordinates = np.array([[]])
for y in range(2):
for x in range(2):
coordinate = np.array([[x,y]])
# append
all_coordinates = np.append(all_coordinates,[coordinate])
print(all_coordinates)
但它不起作用。 它只是連接各個數字而不是附加數組。
而不是給我(我想要實現的輸出):
[[0 0] [1 0] [0,1] [1,1]]
我得到的輸出是:
[0 0 1 0 0 1 1 1]
為什么? 我在這里做錯了什么?
堆棧函數不起作用的問題是它們需要添加的行與已經存在的行具有相同的大小。 使用np.array([[]])
,第一行的長度為零,這意味着您只能添加長度也為零的行。
為了解決這個問題,我們需要告訴 Numpy 第一行的大小是 2 而不是 0。 因此,數組的大小必須是(0, 2)
而不是(0, 0)
。 這可以使用接受大小參數ones
數組初始化函數之一來完成,例如empty
、 zeros
或 one 。 哪個函數無關緊要,因為沒有空格可以填充。
然后您可以使用注釋中提到的函數之一,例如vstack
或stack
。 因此代碼變為:
import numpy as np
all_coordinates = np.zeros((0, 2))
for y in range(2):
for x in range(2):
coordinate = np.array([[x,y]])
# append
all_coordinates = np.vstack((all_coordinates, coordinate))
print(all_coordinates)
在這種情況下,我會使用一個列表,並且只有在添加了所需的所有元素后才將其轉換為數組。 這是一個建議的改進
import numpy as np
all_coordinates = []
for y in range(2):
for x in range(2):
coordinate = np.array([x,y])
# append
all_coordinates.append(coordinate)
all_coordinates = np.array(all_coordinates)
print(all_coordinates)
這段代碼的輸出確實是
array([[0, 0],
[1, 0],
[0, 1],
[1, 1]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.