这段代码的结果对我没有任何意义:
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)
的矩阵?
答案 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]])