从2D表示3D矩阵

时间:2015-10-29 12:45:31

标签: python python-2.7

我有一个要求,假设你有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指索引,就像我最后的那样需要一个形状为(5,25,25)

的3D阵列
id | bar | order
 1 |  1  |   1
 2 |  1  |   2
 3 |  1  |   3
 4 |  1  |   4

最后所有放在一起的最终形状应该是(5,25,25)

简单示例

UPDATE foo SET `order` = NULL WHERE id IN (3, 4);
UPDATE foo SET `order` = 3 WHERE id = 4;
UPDATE foo SET `order` = 4 WHERE id = 3;

这是我期待的实际产出

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)

形状为(7165,23,23)

谁能告诉我怎么做?

1 个答案:

答案 0 :(得分:1)

这是你能做我想做的事情的一种方式。假设您的初始数组是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)的数组。