通过sliding-window numpy示例。试图理解,None
start_idx = np.arange(B[0])[:,None]
foo = np.arange(10)
print foo
print foo[:]
print foo[:,]
print foo[:,None]
None
的效果似乎是转置数组。
[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]]
但我并不完全确定。我还没有找到解释第二个参数(None
)的功能的文档。这也是google的一个难点。 numpy array docs makes me think it has something to do with advanced indexing,但我不太确定。
答案 0 :(得分:17)
foo[:, None]
将1维数组foo
扩展到第二维。事实上,numpy
使用别名np.newaxis
来执行此操作。
考虑foo
foo = np.array([1, 2])
print(foo)
[1 2]
一维数组有局限性。例如,什么是转置?
print(foo.T)
[1 2]
与数组本身相同
print(foo.T == foo)
[ True True]
这种限制有很多含义,在高维背景下考虑foo
会很有用。 numpy使用np.newaxis
print(foo[np.newaxis, :])
[[1 2]]
但是这个np.newaxis
只是None
np.newaxis is None
True
所以,我们经常使用None
来代替它,因为它的字符更少,意味着同样的东西
print(foo[None, :])
[[1 2]]
好的,让我们看看我们还能做些什么。注意我在第一个位置使用None
的示例,而OP使用第二个位置。此位置指定扩展哪个维度。我们可以采取进一步的措施。让这些例子有助于解释
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]]]
请记住numpy打印数组时的尺寸
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]]] ↓