gpt4 book ai didi

python - Numpy 数组错误或功能(在幕后转换为 int)?

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:51 24 4
gpt4 key购买 nike

今天我注意到 Numpy/Scipy 数组的奇怪行为。看起来将内部带有整数的数组单元格添加到 float 可以有两个不同的结果,具体取决于结果分配给的变量。下面我将展示代码,而不是冗长的解释:

import scipy as sp
array_int = sp.array([[0], [0]])
float_operand = 0.1
print array_int[0, 0] + float_operand #gives 0.1

但是

import scipy as sp
array_int = sp.array([[0], [0]])
float_operand = 0.1
array_int[0, 0] = array_int[0, 0] + float_operand
print array_int[0, 0] #gives 0

如果这种行为是从 Python 继承来的,我能理解,但是:

与“裸”Python (2.7) 的行为相反:

integer_for_sure = int(0) 
integer_for_sure = integer_for_sure + 0.1
print integer_for_sure #gives 0.1 as expected

这种功能是否有记录?有人遇到过吗?

最佳答案

Henry Keiter 已经很好地解释了它。我只想添加一个技术细节。

与简单地重新连接 integer_for_sure 以引用由 integer_for_sure + 0.1 产生的 float 对象的常规赋值相反,从而改变了变量的类型,赋值给数组元素如

array_int[0, 0] = array_int[0, 0] + float_operand

实际上是更冗长的语法糖

array_int.__setitem__((0,0), array_int.__getitem__((0,0)) + float_operand)

(这适用于旧式类;新式类看起来有点不同,但思想保持不变)

每个数组类型的 __setitem__ 方法将其值参数转换为数组类型。实现赋值的实际 C 代码有点难看,并且涉及自定义预处理器。

另一边

print array_int[0, 0] + float_operand

print array_int.__getitem__((0,0)) + float_operand

即它从 array_int 中获取整数值,将其与 float_operand 相加,并将生成的 float 对象传递给 printarray_int[0, 0] 没有中间赋值,因此没有类型转换。

关于python - Numpy 数组错误或功能(在幕后转换为 int)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27004245/

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