在使用 n u m p y numpy numpy 的 a r r a y array array 类型数据时发现一问题,情况如下:
问题
首先我创建一个其中元素均为整数,且没有指定数据类型的一维数组:
a = np.array([2,3,4,5])
然后,我改动数组 a \textbf{a} a 中的某个元素(这里以第一个为例)为浮点数:
a[0] = 0.9999
这时,查看数组
a
\textbf{a}
a 会发现第一个元素变成了 0,这就造成了后续程序的错误:
原因
查看官方文档可知, n u m p y numpy numpy 的 a r r a y array array 的默认数据类型是根据初始化赋值数据决定的,即为能够存储初始化数据的最小数据类型。
而我在初始化向量
a
\textbf{a}
a 时传入的均为整型数据,这时该向量的数据类型被设置为
i
n
t
32
int 32
int32 ,所以在我将第一个元素设为浮点型数据时,会进行数据类型转换操作,将浮点型数据转换为整型(
0.999
<
1
0.999 < 1
0.999<1,被转化成
0
0
0 ),进而造成数据精度的损失:
所以,当定义一个今后有可能被改动的
a
r
r
a
y
array
array 数据(小的数据类型改动到大的数据类型)时,应该在初始化时设置数据类型或者在整数后面加上小数点(如 [2.0, 3, 4, 5])以避免上述问题的出现。