gpt4 book ai didi

python - None 的 numpy 索引切片

转载 作者:太空狗 更新时间:2023-10-29 20:40:31 26 4
gpt4 key购买 nike

处理 sliding-window numpy 的例子。试图理解 start_idx = np.arange(B[0])[:,None]

,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) 作用的文档。这也是一个很难用谷歌搜索的片段。 numpy array docs makes me think it has something to do with advanced indexing , 但我不确定。

最佳答案

foo[:, None] 将一维数组 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]]] ↓

关于python - None 的 numpy 索引切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40574982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com