簡體   English   中英

我可以從 numpy 數組列表中創建一個具有一個可變維度的 numpy 數組嗎?

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

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