首页 > 解决方案 > numpy中dtype转换的原理是什么?

问题描述

最近我找到了一个phononmen,让有一个名为的int数组data,其值为

[[1,2,3],
[4,5,6]]

我想减去一个浮点数,我写如下

data[0] = data[0] - 0.5

在我看来,data应该是

[[0.5, 1.5, 2.5],
[  4,   5,   6]]

其实data没变。我使用另一种方式 => data[0] -= 0.5,并且有一个 dtype 错误。

所以,我使用astype它并让它工作,但让我困惑的是为什么data[0] = data[0] - 0.5不会导致错误?data[0] = data[0] - 0.5和 和有什么不一样data[0] -= 0.5?我发现[1]说它是等价的。

标签: pythonnumpy

解决方案


实际上,data已更改,您最终只是用相同的值替换了一些值。该表达式data[0] - 0.5创建一个允许具有新 dtype 的新数组,在本例中为 float dtype array [0.5, 1.5, 2.5]。但是,data它是一个整数 dtype 数组,即使您尝试将 float 数组分配给[0.5, 1.5, 2.5]它的一部分,它也无法更改其 dtype data[0]。它最终四舍五入到[1, 2, 3],这恰好是相同的值。试试看data[0] = data[0] - 1.5,你会看到不同。

其次,告诉你的源码在Pythonx = x + y中相当于是错误的。做加法然后分配。由完全独立的方法实现。但在大多数情况下,并且会做非常相似的事情。x += yx = x + yx.__add__(y)=x += yx.__iadd__(y)__add____iadd__

您的案例因索引而变得更加复杂,data[0] -= 0.5因此data.__setitem__(0, temp)将在之后调用temp = data[0].__isub__(0.5)


推荐阅读