将2D平面中的3D矩阵表示

2024-05-08 22:05:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个要求,假设你有5个文本文件,比如a,b,c,d,e,其中的值以矩阵形式表示,即a,b,c,d,e的形状是(5,5),(4,4),(7,7),(6,6),(8,8)

所以我想要的是在从每个文件得到矩阵之后,我必须通过填充0将形状转换成(1,25,25),这里1指索引,就像在最后我需要一个带有形状(5,25,25)的3D数组

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)

有人能告诉我怎么做吗?你知道吗


Tags: and文件inmakereturn矩阵数组形式
1条回答
网友
1楼 · 发布于 2024-05-08 22:05:26

有一种方法你可以做我认为你想做的事。假设初始数组是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)的数组。你知道吗

相关问题 更多 >