py#矩阵运算以及axis取值的讨论
不同矩阵a,b对应位置元素运算
1)合并矩阵:merge=np.array([a,b])
1)求平均np.mean(merge,axis=0)
2)求标准差np.std(merge,axis=0)
3)求差值,直接a-b
4)求分数,直接a/b
关于axis运算方向的问题,在看了网上的一些解析与实验测试之后,发现如下规律:
当矩阵为2维时,运算很好理解,即axis=0代表每列的平均值,axis=1代表每行的平均值,网上很多这是这样解析的,但是这种表述是不准确的。
准确的表述应为:axis=0代表每行的对应位置元素的平均值,axis=1代表每列对应元素的平均值。
在这种表述下,很容易想到numpy读取元素是按照先行后列,即np.shape[0]为行,np.shape[1]为列。如此解释,就得到了axis值的具体意义,即指np矩阵的行方向对应着元素或者列方向对应位置元素的运算。
并且,在更高维度np矩阵中,这种理解同样适用,如果矩阵a的shape为(2,3,4),通俗可理解为两层三行四列,那么axis=0是对各层对应位置元素进行运算,得到的结果矩阵shape为(3,4);axis=1则是对各层中每行对应位置元素进行运算,得到结果矩阵shape为(2,4);axis=2则对各层中每列对应位置元素进行运算,得到结果矩阵shape为(2,3)
示例:
a1=np.array([[1,1,1,1],[2,2,2,2],[3,3,3,3]]) a2=np.array([[4,4,4,4],[5,5,5,5],[6,6,6,6]]) a=np.array([a1,a2])
a=
array([[[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], [[4, 4, 4, 4], [5, 5, 5, 5], [6, 6, 6, 6]]])
#axis=0,shape[0]维度进行运算 np.mean(a,axis=0)
Out:
array([[2.5, 2.5, 2.5, 2.5], [3.5, 3.5, 3.5, 3.5], [4.5, 4.5, 4.5, 4.5]])
#axis=1,shape[1]维度进行运算 np.mean(a,axis=1)
Out:
array([[2., 2., 2., 2.], [5., 5., 5., 5.]])
#axis=2,shape[2]维度进行运算 np.mean(a,axis=2)
Out:
array([[1., 2., 3.], [4., 5., 6.]])