簡體   English   中英

從 2D 表示 3D 矩陣

[英]Representing 3D Matrix from 2D

我有一個要求,假設您有 5 個文本文件,例如 a、b、c、d、e,其中值以矩陣形式表示,即 a、b、c、d、e 的形狀為 (5,5)、(4 ,4)、(7,7)、(6,6)、(8,8)

所以我想要的是在從每個文件中獲取矩陣之后,我必須通過在此處填充零將形狀轉換為 (1,25,25) 1 指的是 index ,就像最后我需要一個形狀為 (5, 25,25)

shapes conversion:

(5, 5) -> (1,25,25)
(4, 4) -> (2,25,25)
(7, 7) -> (3,25,25)
(6, 6) -> (4,25,25)
(8, 8) -> (5,25,25)

最后全部放在一起最終形狀應該是(5,25,25)

簡單示例

a = [[1,2],[3,4]] 

b = [[5,6],[7,8]] 

make a and b in a single list and return like this 
c = [[[1,2],[3,4]],[[5,6],[7,8]]] 

now the shape of c should be (2,2,2)

這是我期望的實際輸出

array([[[ 36.85810471,   2.90763259,   2.90761209, ...,   0.        ,
           0.        ,   0.        ],
        [  2.90763259,   0.5       ,   0.29672   , ...,   0.        ,
           0.        ,   0.        ],
        [  2.90761209,   0.29672   ,   0.5       , ...,   0.        ,
           0.        ,   0.        ],
        ..., 
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ]],

       [[ 36.85810471,  12.59994411,   2.90199971, ...,   0.        ,
           0.        ,   0.        ],
        [ 12.59994411,  36.85810471,   1.47311664, ...,   0.        ,
           0.        ,   0.        ],
        [  2.90199971,   1.47311664,   0.5       , ...,   0.        ,
           0.        ,   0.        ],
        ..., 
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ]],

       [[ 36.85810471,  14.26182747,   1.503703  , ...,   0.        ,
           0.        ,   0.        ],
        [ 14.26182747,  36.85810471,   2.92502046, ...,   0.        ,
           0.        ,   0.        ],
        [  1.503703  ,   2.92502046,   0.5       , ...,   0.        ,
           0.        ,   0.        ],
        ..., 
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ]],

       ..., 
       [[ 36.85810471,   8.56999111,  13.29380131, ...,   0.        ,
           0.        ,   0.        ],
        [  8.56999111,  53.35870743,  19.15359688, ...,   0.        ,
           0.        ,   0.        ],
        [ 13.29380131,  19.15359688,  36.85810471, ...,   0.        ,
           0.        ,   0.        ],
        ..., 
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ]],

       [[ 36.85810471,  12.54030132,   8.02613068, ...,   0.        ,
           0.        ,   0.        ],
        [ 12.54030132,  36.85810471,  12.64339542, ...,   0.        ,
           0.        ,   0.        ],
        [  8.02613068,  12.64339542,  36.85810471, ...,   0.        ,
           0.        ,   0.        ],
        ..., 
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ]],

       [[ 36.85810471,  12.62930584,  12.60999584, ...,   0.        ,
           0.        ,   0.        ],
        [ 12.62930584,  36.85810471,   7.73449707, ...,   0.        ,
           0.        ,   0.        ],
        [ 12.60999584,   7.73449707,  36.85810471, ...,   0.        ,
           0.        ,   0.        ],
        ..., 
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ],
        [  0.        ,   0.        ,   0.        , ...,   0.        ,
           0.        ,   0.        ]]], dtype=float32)

形狀是 (7165,23,23)

誰能告訴我如何做到這一點?

這是您可以做我認為您想做的一種方法。 假設您的初始數組是ab等,例如:

a = np.arange(25).reshape((5,5))
b = np.arange(36).reshape((6,6))
c = np.arange(16).reshape((4,4))
...

然后填充它們並堆疊它們:

W = np.dstack([np.pad(m,((0,25-m.shape[0]),(0,25-m.shape[0])),
                      mode='constant') for m in (a,b,c)])
X = np.rollaxis(W, 2)

X.shape然后是(3, 25, 25)原始矩陣條目在每個“層”的左上角。 您需要滾動軸,因為深度堆疊它們會得到一個形狀為(25, 25, 3)的數組。

暫無
暫無

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

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