c = np.array([[[0, 1, 2,3],
[4, 5, 6,7]],
[[1, 2, 3,4],
[5,6,7,8]]]
print( c.sum(axis=0))
print( c.sum(axis=1))
print( c.sum(axis=2))
请问三个输出该怎么理解?
c = np.array([[[0, 1, 2,3],
[4, 5, 6,7]],
[[1, 2, 3,4],
[5,6,7,8]]]
print( c.sum(axis=0))
print( c.sum(axis=1))
print( c.sum(axis=2))
请问三个输出该怎么理解?
一个不是很简单,但是很好理解的方法是:你的输入矩阵的shape是(2,2,4),那么当axis=0
时,就是在第一个dimension上进行求和,最后得到的结果的shape就是去掉第一个dimension后的shape,也就是(2,4)。具体的计算方法则是,对于c[i,j,k],假设输出矩阵为s[j,k],第一个dimension求和那么就是 $$s[j,k]=\sum_i(c[i,j,k])$$
如果axis=1
,那么输出shape就是去掉第二个dim,也就是(2,4),计算是 $s[i,k]=sum_j(c[i,j,k])$
如果axis=2
,那么输出shape就是去掉第三个dim,也就是(2,2),计算是 $s[i,j]=sum_k(c[i,j,k])$
在数据处理里面经常会碰到高维数据,通过二维矩阵去想它的计算方法就很难了,这个时候只要按axis对应的维度求和,其他维度的位置和形状不变,最后把shape去掉对应维度就能理解了
1 回答9.6k 阅读✓ 已解决
2 回答5.3k 阅读✓ 已解决
2 回答3.6k 阅读✓ 已解决
3 回答4.5k 阅读
3 回答1.4k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
2 回答1.6k 阅读✓ 已解决
首先可以把
c
可以看作一个2x2的矩阵,而矩阵的每个元素是一个长度为4的数组(例如[0, 1, 2, 3]),因此c是一个三维array。当参数
axis = 0
时,求矩阵每一列上元素的和。例如,对第一列上的两个数组[0, 1, 2, 3]和[1, 2, 3, 4]相加,返回一个新的数组[1, 3, 4, 7],后面的列依次类推。因此最后得到一个新的数组,即:axis = 1
时,对矩阵每一行 上的元素进行求和,同上。axis = 2
时,对矩阵每个元素进行求和,即对你矩阵中每个列表内的元素求和,返回一个新的2x2矩阵。这听起来有些奇怪,但前提必须是一个三维数组,且axis
的值必须小于数组的维度,否则会出现异常:此外,还能通过索引来得到
c
中的每个元素,例如:希望答案对你有帮助。