gpt4 book ai didi

python - 为什么递增索引数组的行为如 numpy 用户文档中所述?

转载 作者:太空狗 更新时间:2023-10-30 02:21:11 25 4
gpt4 key购买 nike

例子

关于assigning value to indexed arrays的文档为那些天真的程序员展示了一个具有意外结果的示例。

>>> x = np.arange(0, 50, 10)
>>> x
array([ 0, 10, 20, 30, 40])
>>> x[np.array([1, 1, 3, 1])] += 1
>>> x
array([ 0, 11, 20, 31, 40])

文档说人们天真地期望 x[1]+1 处的数组的值递增三倍,但它却被分配给了 x[1] 三遍。

问题

真正让我感到困惑的是,我所期望的是操作 x += 1 的行为就像它在普通 Python 中所做的那样,如 x = x + 1,所以x 结果 array([11, 11, 31, 11])。如本例所示:

>>> x = np.arange(0, 50, 10)
>>> x
array([ 0, 10, 20, 30, 40])
>>> x = x[np.array([1, 1, 3, 1])] + 1
>>> x
array([11, 11, 31, 11])

问题

首先:

原始示例中发生了什么?有人可以详细说明一下吗?

第二个:

这是一个记录在案的行为,我同意这一点。但我认为它应该像我描述的那样表现,因为从 Pythonistic 的角度来看这是预期的。所以,只是因为我想被说服:是否有充分的理由让它表现得比“我预期的”行为更好?

最佳答案

问题是你给出的第二个例子和第一个不一样。如果您分别查看 x[np.array([1, 1, 3, 1])] + 1 的值会更容易理解,numpy 在您的两个示例中都计算了它。

x[np.array([1, 1, 3, 1])] + 1 的值是您所期望的:array([11, 11, 31, 11])

>>> x = np.arange(0, 50, 10)
>>> x
array([ 0, 10, 20, 30, 40])
>>> x[np.array([1, 1, 3, 1])] + 1
array([11, 11, 31, 11])

在示例 1 中,您将此答案分配给原始数组 x 中的元素 1 和 3。这意味着新值 11 被分配给元素 1 3 次。

但是,在示例 2 中,您将原始数组 x 替换为新数组 array([11, 11, 31, 11])

这是您第一个示例的正确等效代码,并给出相同的结果。

>>> x = np.arange(0, 50, 10)
>>> x
array([ 0, 10, 20, 30, 40])
>>> x[np.array([1, 1, 3, 1])] = x[np.array([1, 1, 3, 1])] + 1
>>> x
array([ 0, 11, 20, 31, 40])

关于python - 为什么递增索引数组的行为如 numpy 用户文档中所述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17704605/

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