在Python中,如果我定义一个二维数组,并将第二行设置为np.nan,那么第二行将变成全部-9223372036854775808,而不是缺少值,下面是一个例子:
b = np.array(
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 5],
[0, 3, 4, 4, 6, 6, 6, 5, 4, 5],
[0, 0, 0, 3, 6, 6, 6, 6, 6, 6],
[0, 0, 3, 4, 6, 6, 6, 6, 6, 6],
[0, 1, 2, 4, 4, 4, 4, 4, 4, 4]])
b[1, :] = np.nan
print(b)
[[ 0 0 0
0 0 0
0 0 0
5]
[-9223372036854775808 -9223372036854775808 -9223372036854775808
-9223372036854775808 -9223372036854775808 -9223372036854775808
-9223372036854775808 -9223372036854775808 -9223372036854775808
-9223372036854775808]
[ 0 0 0
3 6 6
6 6 6
6]
[ 0 0 3
4 6 6
6 6 6
6]
[ 0 1 2
4 4 4
4 4 4
4]]
有人知道吗?我应该如何正确地分配一行给np.nan?
作为参考,我在Ubuntu 16.04.7 LTS(GNU/Linux 4.15.0-132-generic x86_64)上运行由mamba创建的python 3.7.10环境。
4条答案
按热度按时间j2datikz1#
np.nan
是一个特殊的浮点值,不能在整数数组中使用。由于b
是一个整数数组,因此代码b[1, :] = np.nan
尝试将np.nan
转换为整数,这是一个未定义的行为。有关类似问题的讨论,请参见this。6tr1vspr2#
你用整数初始化了你的数组。整数没有一个可能的“nan”值,并且将采用最小值。一个快速的解决方法是将你的数组初始化为np.floats,它们被允许是“nan”:
5jvtdoz23#
首先,nan是一个仅用于浮点数组的特殊值。
我试着运行你的代码在我的python 3.8(64位环境)在Windows x-64的基础上。
这是我得到的
在int数组的情况下,我得到了int的下限,而不是NaN,根据您的环境,您也会得到相同的下限。
所以你可以用floatarray来代替intarray。
rxztt3cl4#
这个数字等于-2 3,这是64位整数限制的最小值,我没有用python编写代码,但在我看来,您的代码没有将NaN识别为一个值,所以它使用了它可以识别的最小值。