gpt4 book ai didi

python - 为什么 NumPy 数组不使用预测器更新原始数组

转载 作者:行者123 更新时间:2023-12-05 04:23:30 24 4
gpt4 key购买 nike

我正在学习 NumPy(和 Python)并完成一些关于数组的练习。我提出了一个我无法理解的问题。我知道下面的代码应该更新 b 指向的原始数组。代码如下。

a = np.zeros((4,5))
b = a[1:3,0:3]
b = b + 100
print('a = ', a)
print('b = ', b)

输出是:

a =  [[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
b = [[100. 100. 100.]
[100. 100. 100.]]

为什么 a 没有随着 b 一起更新?我知道指针对象应该通过编辑来更新原始对象。我假设这是由于将 100 添加到 b 的语法。正如我所想,下面的代码随着原始数组的变化而更新。有什么区别?

a = np.zeros((4,5))
b = a[1:3,0:3]
b[0, 0] = 100
print('a = ', a)

输出:

a =  [[  0.   0.   0.   0.   0.]
[100. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]

最佳答案

Python 没有指针,至少在其他语言(例如 C)的意义上没有。

这里发生的事情是,当您索引数组时,即 a[1:3,0:3],您创建了 a< 中的部分数据的 View Numpy docs on what views are

在您的第一个示例中,您随后评估 b + 100,这将创建一个新数组。您将结果分配给相同的变量名 b 不会改变此行为。

在您的第二个示例 b[0, 0] = 100 中,您就地修改了 b。由于 b 只是 a 的 View ,因此您还修改了 a 的相应条目。

您可以重写您的第一个示例,改为执行 b += 100,这将再次就地修改 b 并且还将更改 a

关于python - 为什么 NumPy 数组不使用预测器更新原始数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73694957/

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