如何从多个2d数组创建一个numpy矩阵/ 2d数组?

时间:2015-04-19 20:30:04

标签: python arrays numpy matrix

python中,我想从四个2d numpy arrays

构建一个矩阵
m = np.eye(3, 3)
c = np.random.rand(2, 3)
cT = c.T
z = np.zeros([min(np.shape(c)), min(np.shape(c))])

并且新的矩阵形状定义为:

[[m, cT],
 [c, z]]

或像这样(带有数字数据):

1.      0.      0.      0.0109  0.5339
0.      1.      0.      0.4991  0.9854
0.      0.      1.      0.5942  0.7565
0.0109  0.4991  0.5942  0.      0.
0.5339  0.9854  0.7565  0.      0.

我想问一下python使用numpy

在{{1}}中最简单的是什么,也是最快的(以CPU为单位)

2 个答案:

答案 0 :(得分:1)

最直接的方法是将每个数据复制到适当的切片

>>> m = np.eye(3, 3)
>>> c = np.random.rand(2, 3)
>>> cT = c.T
>>> z = np.empty([min(np.shape(c)), min(np.shape(c))])
>>> X = np.eye(5, 5)
>>> X[:3, :3] = m
>>> X[:3, -2:] = c.T
>>> X[-2:, :3] = c
>>> X[-2:, -2:] = z
>>> X
array([[ 1.        ,  0.        ,  0.        ,  0.98834141,  0.69806125],
       [ 0.        ,  1.        ,  0.        ,  0.97342311,  0.97368278],
       [ 0.        ,  0.        ,  1.        ,  0.28701318,  0.08705423],
       [ 0.98834141,  0.97342311,  0.28701318,  0.        ,  0.        ],
       [ 0.69806125,  0.97368278,  0.08705423,  0.        ,  0.        ]])
>>>

答案 1 :(得分:1)

合并vstackhstack可以做到这一点:

from numpy import ones, hstack, vstack
a, b, c, d = ones((3,3)), 2*ones((3,2)), 3*ones((2,3)), 4*ones((2,2))

x = hstack(( vstack((a, c)), vstack((b, d)) ))

[[ 1.  1.  1.  2.  2.]
 [ 1.  1.  1.  2.  2.]
 [ 1.  1.  1.  2.  2.]
 [ 3.  3.  3.  4.  4.]
 [ 3.  3.  3.  4.  4.]]