gpt4 book ai didi

python - Numpy 高级索引和基本索引

转载 作者:行者123 更新时间:2023-12-05 07:30:45 25 4
gpt4 key购买 nike

我正在尝试理解 this article 的特定部分.

The definition of advanced indexing means that x[(1,2,3),] is fundamentally different than x[(1,2,3)]. The latter is equivalent to x[1,2,3] which will trigger basic selection while the former will trigger advanced indexing. Be sure to understand why this occurs.

我试验了以下代码。

>>> import numpy as np 
>>> a = np.arange(50).reshape(5,10)
>>> b = a[(2,2)]
>>> bb = a[(2,2),]
>>> a[2,2] = 50 # a[2,2] was 22 in the first place
>>> b
22 # this outcome confuses me!

我认为 b = a[(2,2)] 会得到一个 View ,所以当我更改 a[2,2] 时会得到一个 View 。

bb = a[(2,2),] 会收到副本,所以即使我在 a 上做某事也不会发生任何事情。

但是当我将 a[2,2] 从 22 更改为 50

我期望 b = a[(2,2)] 会变成 50 a 而 bb = a[(2,2),] 会变成保持不变。

这一切有什么问题?我是否误解或遗漏了重要的事情?

如果是,请指正并提前致谢!

最佳答案

“基本选择”(即索引而不是切片)不会创建 View ,它会创建一个副本。为了成为一个 View ,您需要传递一个单元素切片(切片与索引不同,它始终是一个 View )。

import numpy as np 
a = np.arange(50).reshape(5,10)
b = a[2:3,2:3].squeeze()
a[2,2] = 50
b

array(50)

你也可以用 b = a[2, 2, None].squeeze() 得到同样的结果,它会触发“花哨的”索引,“这是一种选择之间的混合并切片并返回一个 View 。使用“高级”索引(就像您所做的那样,或者像 b = a[[2],[2]])是索引的一种变体,并返回一个副本。

是的,保持这些不同类型的索引对初学者来说并不容易。创建一个元素的 View 仍然有点老套。像 array(50) 这样的 0 维数组在大多数情况下都可以像普通的 int 一样使用。

更令人困惑的是,a[2,2] 在等号左侧而不是右侧时被解释为 View .它与 = 被解释为 .__setitem__() 有关。

关于python - Numpy 高级索引和基本索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52109977/

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