[英]Can I create a numpy array with one variable dimension from a list of numpy arrays?
這是我的問題的最小示例,我有一個如下所示的 numpy 數組列表:
a = np.zeros([4,3])
b = np.ones([5,3])
my_list = [a, b]
my_list
[array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]), array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])]
列表中的數組可以在一個(並且只有一個)維度(此處為 4 或 5)中具有可變長度。
我最終想要的是一個尺寸為(2,“Variable-size”,3)的numpy數組。 輸出應如下所示:
array([[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]]])
np.vstack() 或 np.concatenate() 不會返回我正在尋找的形狀,因為它們正在生成具有 (9, 3) 形狀的輸出。
您不能使用形狀為 numpy 的數組: (2, "Variable-size", 3) ,但您可以將兩個形狀為("Variable-size", 3)的數組連接到(shape1[0] + shape2[ 0], 3) . 正如你所寫:
我正在尋找,因為他們正在生成具有 (9, 3) 形狀的輸出
numpy.concatenate()
可以解決您的問題:
np.concatenate((a,b))
出去:
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
如果您仍想在 numpy 中保持可變的第三維,則使用padding進行此操作的唯一方法,此處使用零填充:
import numpy as np
a = np.array([
[50., 50., 50.],
[50., 50., 50.],
[50., 50., 50.],
[50., 50., 50.],
[0., 0., 0.] # zero padding
])
b = np.array([
[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.]
])
new_matrix = [a, b]
print(new_matrix)
出去:
[array([[50., 50., 50.],
[50., 50., 50.],
[50., 50., 50.],
[50., 50., 50.],
[ 0., 0., 0.]]), array([[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.]])]
該方法可廣泛用於一種圖像處理解決方案。 通過這個技巧,您也可以利用numpy
中矩陣運算的所有積極屬性,但您可以保持數據形狀相對靈活。 正如威廉上面提到的,numpy 僅適用於“矩形”數據,而具有可變維數矩陣的操作在大多數情況下都是模棱兩可的。
如果您甚至不想使用任何上述解決方案,則必須選擇列表和 numpy 數組組合,即列表中具有任何維度的 numpy 數組。
在第三軸上堆疊具有相同維度的二維數組時我做了什么:
var_vid = np.concatenate((var_vid, np.expand_dims(new_array, axis=2)), axis=2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.