【发布时间】:2014-06-05 02:35:30
【问题描述】:
我有一个类似这样的 numpy 数组:
a = np.arange(0,100).reshape(25,4)
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31],
[32, 33, 34, 35],
[36, 37, 38, 39],
[40, 41, 42, 43],
[44, 45, 46, 47],
[48, 49, 50, 51],
[52, 53, 54, 55],
[56, 57, 58, 59],
[60, 61, 62, 63],
[64, 65, 66, 67],
[68, 69, 70, 71],
[72, 73, 74, 75],
[76, 77, 78, 79],
[80, 81, 82, 83],
[84, 85, 86, 87],
[88, 89, 90, 91],
[92, 93, 94, 95],
[96, 97, 98, 99]])
我想使用这个数组以非常精确的顺序创建一个块矩阵。每个块必须是从 a 的相应列构造的方阵。因此,在这种情况下,我们有 4 个 5X5 块。一种方法如下:
a = np.arange(0,100).reshape(25,4)
A = a[:, 0].reshape(np.sqrt(a.shape[0]), np.sqrt(a.shape[0]))
B = a[:, 1].reshape(np.sqrt(a.shape[0]), np.sqrt(a.shape[0]))
C = a[:, 2].reshape(np.sqrt(a.shape[0]), np.sqrt(a.shape[0]))
D = a[:, 3].reshape(np.sqrt(a.shape[0]), np.sqrt(a.shape[0]))
np.bmat([[A,B],[C,D]])
matrix([[ 0, 4, 8, 12, 16,| 1, 5, 9, 13, 17],
[20, 24, 28, 32, 36,| 21, 25, 29, 33, 37],
[40, 44, 48, 52, 56,| 41, 45, 49, 53, 57],
[60, 64, 68, 72, 76,| 61, 65, 69, 73, 77],
[80, 84, 88, 92, 96,| 81, 85, 89, 93, 97],
--------------------------------------- ,
[ 2, 6, 10, 14, 18,| 3, 7, 11, 15, 19],
[22, 26, 30, 34, 38,| 23, 27, 31, 35, 39],
[42, 46, 50, 54, 58,| 43, 47, 51, 55, 59],
[62, 66, 70, 74, 78,| 63, 67, 71, 75, 79],
[82, 86, 90, 94, 98,| 83, 87, 91, 95, 99]])
但是,我需要在不“手动”创建每个矩阵的情况下构建此矩阵,并且能够将此方法推广到更多维度(3X3、4X4 等)
谢谢!
【问题讨论】:
标签: python arrays numpy matrix