Working through a sliding-window example for numpy. Was trying to understand the ,None
of start_idx = np.arange(B[0])[:,None]
foo = np.arange(10)
print foo
print foo[:]
print foo[:,]
print foo[:,None]
The effect of the None
seems to be to transpose the array.
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]]
But I'm not totally sure. I haven't been able to find the documentation that explains what the second parameter (None
) does. It's a hard fragment to google for, too. The numpy array docs makes me think it has something to do with advanced indexing, but I'm not sure enough.
foo[:, None]
extends the 1 dimensional array foo
into the second dimension. In fact, numpy
uses the alias np.newaxis
to do this.
consider foo
foo = np.array([1, 2])
print(foo)
[1 2]
A one dimensional array has limitations. For example, what's the transpose?
print(foo.T)
[1 2]
The same as the array itself
print(foo.T == foo)
[ True True]
This limitation has many implications and it becomes useful to consider foo
in higher dimensional context. numpy uses np.newaxis
print(foo[np.newaxis, :])
[[1 2]]
But this np.newaxis
is just syntactic sugar for None
np.newaxis is None
True
So, often we use None
instead because it's less characters and means the same thing
print(foo[None, :])
[[1 2]]
Ok, let's see what else we could've done. Notice I used the example with None
in the first position while OP use the second position. This position specifies which dimension is extended. And we could've taken that further. Let these examples help explain
print(foo[None, :]) # same as foo.reshape(1, 2)
[[1 2]]
print(foo[:, None]) # same as foo.reshape(2, 1)
[[1]
[2]]
print(foo[None, None, :]) # same as foo.reshape(1, 1, 2)
[[[1 2]]]
print(foo[None, :, None]) # same as foo.reshape(1, 2, 1)
[[[1]
[2]]]
print(foo[:, None, None]) # same as foo.reshape(2, 1, 1)
[[[1]]
[[2]]]
Keep in mind which dimension is which when numpy prints the array
print(np.arange(27).reshape(3, 3, 3))
dim2
────────⇀
dim0 → [[[ 0 1 2] │ dim1
[ 3 4 5] │
[ 6 7 8]] ↓
────────⇀
→ [[ 9 10 11] │
[12 13 14] │
[15 16 17]] ↓
────────⇀
→ [[18 19 20] │
[21 22 23] │
[24 25 26]]] ↓
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With