我已经接受了自己,以了解如何NumPy为我自己的好奇心而努力.
似乎最简单的函数是最难转换为代码(我理解为代码).对于每种情况,很容易对每个轴进行硬编码,但我想找到一个动态算法,该算法可以在具有n维的任何轴上求和.官方网站上的文档没有帮助(它只显示结果而不是过程),并且很难浏览Python/C代码.
注意:我确实发现,当一个数组相加时,指定的轴被"移除",即形状为(4,3,2)且轴为1的数组的总和产生一个形状为(4,2)
piR*_*red 79
考虑numpy数组 a
a = np.arange(30).reshape(2, 3, 5)
print(a)
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]]]
Run Code Online (Sandbox Code Playgroud)
尺寸和位置由以下突出显示
p p p p p
o o o o o
s s s s s
dim 2 0 1 2 3 4
| | | | |
dim 0 ? ? ? ? ?
----> [[[ 0 1 2 3 4] <---- dim 1, pos 0
pos 0 [ 5 6 7 8 9] <---- dim 1, pos 1
[10 11 12 13 14]] <---- dim 1, pos 2
dim 0
----> [[15 16 17 18 19] <---- dim 1, pos 0
pos 1 [20 21 22 23 24] <---- dim 1, pos 1
[25 26 27 28 29]]] <---- dim 1, pos 2
? ? ? ? ?
| | | | |
dim 2 p p p p p
o o o o o
s s s s s
0 1 2 3 4
Run Code Online (Sandbox Code Playgroud)
通过一些例子,这变得更加清晰
a[0, :, :] # dim 0, pos 0
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
Run Code Online (Sandbox Code Playgroud)
a[:, 1, :] # dim 1, pos 1
[[ 5 6 7 8 9]
[20 21 22 23 24]]
Run Code Online (Sandbox Code Playgroud)
a[:, :, 3] # dim 2, pos 3
[[ 3 8 13]
[18 23 28]]
Run Code Online (Sandbox Code Playgroud)
sum解释sum和axis
a.sum(0)是所有切片的总和dim 0
a.sum(0)
[[15 17 19 21 23]
[25 27 29 31 33]
[35 37 39 41 43]]
Run Code Online (Sandbox Code Playgroud)
与...一样
a[0, :, :] + \
a[1, :, :]
[[15 17 19 21 23]
[25 27 29 31 33]
[35 37 39 41 43]]
Run Code Online (Sandbox Code Playgroud)
a.sum(1) 是所有切片的总和 dim 1
a.sum(1)
[[15 18 21 24 27]
[60 63 66 69 72]]
Run Code Online (Sandbox Code Playgroud)
与...一样
a[:, 0, :] + \
a[:, 1, :] + \
a[:, 2, :]
[[15 18 21 24 27]
[60 63 66 69 72]]
Run Code Online (Sandbox Code Playgroud)
a.sum(2) 是所有切片的总和 dim 2
a.sum(2)
[[ 10 35 60]
[ 85 110 135]]
Run Code Online (Sandbox Code Playgroud)
与...一样
a[:, :, 0] + \
a[:, :, 1] + \
a[:, :, 2] + \
a[:, :, 3] + \
a[:, :, 4]
[[ 10 35 60]
[ 85 110 135]]
Run Code Online (Sandbox Code Playgroud)
默认轴是-1
指所有轴.或者总结所有数字.
a.sum()
435
Run Code Online (Sandbox Code Playgroud)