numpy块矩阵如何工作?

时间:2017-04-03 03:34:30

标签: python numpy

这段代码的结果对我没有任何意义:

a = np.zeros((2, 2))
b = np.bmat([[a, a], [a, a]])
print(b.shape, b.dot(np.zeros(4)).shape)

在最终轴上执行sum-product时,形状为(4, 4)的矩阵如何返回形状(1, 4)的矩阵?

2 个答案:

答案 0 :(得分:3)

bmat会返回numpy.matrix个实例,因为它们应该永远不会使用,因为它们会导致各种奇怪的不兼容性。 numpy.matrix总是尝试保留至少两个维度,因此b.dot(np.zeros(4))是2D而不是1D。

制作numpy.array

b = np.bmat([[a, a], [a, a]]).A
#                             ^

或者从NumPy 1.13开始,

b = np.block([[a, a], [a, a]])

答案 1 :(得分:1)

bmat没有做任何异国情调或幻想;基本上它只是串联的几个级别:

In [308]: np.bmat([[a,a],[a,a]]).A
Out[308]: 
array([[0, 1, 0, 1],
       [2, 3, 2, 3],
       [0, 1, 0, 1],
       [2, 3, 2, 3]])

In [309]: alist = [[a,a],[a,a]]
In [310]: np.concatenate([np.concatenate(sublist, axis=1) for sublist in alist], axis=0)
Out[310]: 
array([[0, 1, 0, 1],
       [2, 3, 2, 3],
       [0, 1, 0, 1],
       [2, 3, 2, 3]])