如下代码所示:
import numpy as np
aa = np.ones((5,3),np.int64)
print(aa)
bb = aa[2, :] #截取矩阵第二行
print(bb.shape)
输出为:
[[1 1 1]
[1 1 1]
[1 1 1]
[1 1 1]
[1 1 1]]
(3,)
(3,)表示什么意思呢?按照我们的思维,截取之后的bb应该是一个1*3的矩阵,然而,np array在切片的时候,自动改变了维度,现在bb已经变成了一维数组,那么其二维自然不存在,用一个图形象表示:
[[], [], [], ...] (二维数组)————》[](一维数组)而不是[[],](第二维度为1的二维数组)
此时,如果你把bb当做一个1*3的矩阵去做运算,那么就会发生不可描述的错误,并且还不会报语法错误。
如下:
cc = np.ones((3,1),np.int64)
dd = bb * cc
print(dd)
输出如下:
[[1 1 1]
[1 1 1]
[1 1 1]]
咋一看似乎没错,但是cc是一个3*1的矩阵,而bb如果是1*3的话,那么结果应该是1*1的一个数,然而事实是结果产生了一个二维数组。
这就是因为bb变成了一维数组。而二维数组与一维数组之间是没有好结果的QAQ
解决方案其实很简单,因为numpy matrix总是保持二维,你可以直接转变为matrix之后再做变化,如下:
import numpy as np
aa = np.ones((5,3),np.int64)
aa = np.asmatrix(aa)
bb = aa[2, :] #截取矩阵第二行
print(bb.shape)
cc = np.ones((3,1),np.int64)
dd = bb * cc
print(dd)
输出如下:
(1, 3):表示bb的类型是二维数组
[[3]] :结果是一个数。
[[3]] :结果是一个数。