gpt4 book ai didi

python - 关于 NumPy 数组切片何时是引用以及何时是副本的混淆

转载 作者:行者123 更新时间:2023-11-30 22:04:52 25 4
gpt4 key购买 nike

我有以下代码:

import numpy as np
arr = np.arange(10)
slice = arr[2:5]
slice[:] = 12
print(arr)
slice = slice / 2
print(arr)

输出将是:

[ 0  1 12 12 12  5  6  7  8  9]
[6. 6. 6.]
[ 0 1 12 12 12 5 6 7 8 9]

因此,第一次 slice 只是对 arr 部分的引用,因此修改它也会更改数组,但第二次它已成为 arr 的副本数组的这一部分并对其进行修改在 arr 中没有任何区别。为什么会出现这种情况? slice = slice/2 有何不同?

最佳答案

使用切片对象进行索引始终返回数组的 View (引用)。修改切片将修改原始数组。在第二个示例中,您分配给切片对象。这不会修改对象。将使用指定的值创建一个新对象,在本例中为 slice/2。您可以使用 /= 就地修改对象(如果这是所需的行为),或者对切片进行索引 ( [:]),numpy 将其解释为修改这些索引处的条目。

关于python - 关于 NumPy 数组切片何时是引用以及何时是副本的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53156714/

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