簡體   English   中英

1d numpy 陣列到矩陣中的塊

[英]1d numpy array to blocks in a matrix

我有一個 1D 數組,我需要將其reshape()轉換為 2D 數組,但是 reshape 很棘手,因為它似乎需要某種分組。

我嘗試了幾個不同系列的 reshape() 和 transpose() 組合,但我還沒有找到正確的值排列方式。

我在下面提供了兩個 arrays。 我想重塑一維數組a以具有與二維數組b相同的形狀。 這個技巧的原因是我想要中間的 4 個。 我做了一些嘗試,為每 4 個值制作 2x2 塊,然后排列到 6x6 數組中,但我沒有成功。

a = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

b = np.array([
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0],
    [0, 0, 1, 1, 0, 0],
    [0, 0, 1, 1, 0, 0],
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0]])

這里是形狀

> a.shape                                                                          
(36,)                                                                                
> b.shape                                                                          
(6, 6)   

這樣做:

In [327]: a = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
     ...:  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
     ...: 
In [328]: a.reshape(3,3,2,2)
Out[328]: 
array([[[[0, 0],
         [0, 0]],

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

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


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

        [[1, 1],
         [1, 1]],

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


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

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

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

1s 的 (2,2) 塊是可見的,但我需要切換中間的 2 個維度:

In [329]: a.reshape(3,3,2,2).transpose(0,2,1,3)
Out[329]: 
array([[[[0, 0],
         [0, 0],
         [0, 0]],

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


       [[[0, 0],
         [1, 1],
         [0, 0]],

        [[0, 0],
         [1, 1],
         [0, 0]]],


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

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

現在回到二維:

In [330]: a.reshape(3,3,2,2).transpose(0,2,1,3).reshape(6,6)
Out[330]: 
array([[0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0]])

reshape,transpose,然后是reshape的基本步驟對於這類問題是常見的。 轉調很詳細。

暫無
暫無

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

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