在Python中,如果我定义一个2D数组,并将第二行设置为np.nan,那么第二行将变成all-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
为了供您参考,我在由mamba在Ubuntu 16.04.7 LTS(GNU/Linux 4.15.0-132-generic x86_64)上创建的python 3.7.10环境中运行这些代码
你用整数初始化了你的数组。整数没有可能的“nan”值,将使用最小值。一个快速修复方法是将数组初始化为np。浮点值允许为“nan”:
np.nan
是一个特殊的浮点值,不能在整数数组中使用。由于b
是一个整数数组,因此代码b[1, :] = np.nan
尝试将np.nan
转换为整数,这是一种未定义的行为。关于类似问题的讨论,见this首先,nan仅是浮点数组的特殊值
我尝试在基于Windows x-64的python 3.8(64位环境)上运行您的代码
这就是我得到的
在int数组的情况下,我得到了int的下界,而不是NaN,并且根据您的环境也得到了相同的下界
因此,可以使用float数组代替int数组
相关问题 更多 >
编程相关推荐