Jarann - 11 months ago 113

Python Question

I've taken it upon myself to learn how

`NumPy`

It seems that the simplest function is the hardest to translate to code (I understand by code). It's easy to hard code each axis for each case but I want to find a dynamic algorithm that can sum in any axis with n-dimensions.

The documentation on the official website is not helpful (It only shows the result not the process) and it's hard to navigate through Python/C code.

Answer Source

consider the numpy array `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]]]
```

The dimensions and positions are highlighted by the following

```
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
```

This becomes more clear with a few examples

```
a[0, :, :] # dim 0, pos 0
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
```

```
a[:, 1, :] # dim 1, pos 1
[[ 5 6 7 8 9]
[20 21 22 23 24]]
```

```
a[:, :, 3] # dim 2, pos 3
[[ 3 8 13]
[18 23 28]]
```

`sum`

*explanation of sum and axis*

`a.sum(0)`

is the sum of all slices along `dim 0`

```
a.sum(0)
[[15 17 19 21 23]
[25 27 29 31 33]
[35 37 39 41 43]]
```

same as

```
a[0, :, :] + \
a[1, :, :]
[[15 17 19 21 23]
[25 27 29 31 33]
[35 37 39 41 43]]
```

`a.sum(1)`

is the sum of all slices along `dim 1`

```
a.sum(1)
[[15 18 21 24 27]
[60 63 66 69 72]]
```

same as

```
a[:, 0, :] + \
a[:, 1, :] + \
a[:, 2, :]
[[15 18 21 24 27]
[60 63 66 69 72]]
```

`a.sum(2)`

is the sum of all slices along `dim 2`

```
a.sum(2)
[[ 10 35 60]
[ 85 110 135]]
```

same as

```
a[:, :, 0] + \
a[:, :, 1] + \
a[:, :, 2] + \
a[:, :, 3] + \
a[:, :, 4]
[[ 10 35 60]
[ 85 110 135]]
```

default axis is `-1`

this means all axes. or sum all numbers.

```
a.sum()
435
```