簡體   English   中英

numpy 用填充調整 n 維數組的大小

[英]numpy resize n-dimensional array with padding

我有兩個數組, ab

a有形狀(1, 2, 3, 4)

b有形狀(4, 3, 2, 1)

我想讓它們都(4, 3, 3, 4)新位置填充 0。

我可以:

new_shape = (4, 3, 3, 4)

a = np.resize(a, new_shape)
b = np.resize(b, new_shape)

..但是這會重復每個元素以形成新元素,這對我不起作用。

相反,我認為我可以這樣做:

a = a.resize(new_shape)
b = b.resize(new_shape)

..根據文檔用0填充。

但它不適用於多維數組,引發錯誤:

ValueError:調整大小僅適用於單段數組

那么有沒有不同的方法來實現這一目標? IE。 與 np.resize 相同但帶有 0-padding?

注意:我只是在尋找純麻木的解決方案。

編輯:我使用的是 numpy 版本 1.20.2

編輯:我剛剛發現它適用於數字,但不適用於對象,我忘了提到它是一個對象數組而不是數字。

在扁平意義上用 0 resize方法焊盤的resize 功能墊重復。

為了說明如何在填充之前resize “展平”:

In [108]: a = np.arange(12).reshape(1,4,3)
In [109]: a
Out[109]: 
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]]])
In [110]: a1 = a.copy()
In [111]: a1.resize((2,4,4))
In [112]: a1
Out[112]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [ 0,  0,  0,  0]],

       [[ 0,  0,  0,  0],
        [ 0,  0,  0,  0],
        [ 0,  0,  0,  0],
        [ 0,  0,  0,  0]]])

相反,如果我創建一個正確形狀的目標數組並復制,我可以保留原始的多維塊:

In [114]: res = np.zeros((2,4,4),a.dtype)
In [115]: res[:a.shape[0],:a.shape[1],:a.shape[2]]=a
In [116]: res
Out[116]: 
array([[[ 0,  1,  2,  0],
        [ 3,  4,  5,  0],
        [ 6,  7,  8,  0],
        [ 9, 10, 11,  0]],

       [[ 0,  0,  0,  0],
        [ 0,  0,  0,  0],
        [ 0,  0,  0,  0],
        [ 0,  0,  0,  0]]])

我明確地寫出了切片(為了清楚起見)。 如果需要,可以通過編程方式創建這樣的元組。

暫無
暫無

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

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