gpt4 book ai didi

Python numpy nan 在带有字符串的数组中与 true 进行比较

转载 作者:行者123 更新时间:2023-11-28 18:40:13 25 4
gpt4 key购买 nike

我正在尝试比较两个包含数字、字符串和 nans 的 numpy 数组。我想知道数组中有多少项是相等的。

比较这两个数组时:

c =np.array([1,np.nan]);
d =np.array([2,np.nan]);
print (c==d)
[False False]

这是预期的行为。

但是,比较时:

a =np.array([1,'x', np.nan]);
b =np.array([1,'x', np.nan]);
print (a==b)
[ True True True]

这对我来说毫无意义,向数组中添加一个字符串如何改变 nans 的比较方式?有什么想法吗?

谢谢!

最佳答案

如果检查数组,您会看到 np.nan 已转换为字符串 ('n'):

In [48]: a = np.array([1, 'x', np.nan])

In [49]: a
Out[49]:
array(['1', 'x', 'n'],
dtype='|S1')

'n' == 'n'True

我不明白的是为什么将数组的 dtype 更改为 object 不会更改比较结果:

In [72]: a = np.array([1, 'x', np.nan], dtype=object)

In [73]: b = np.array([1, 'x', np.nan], dtype=object)

In [74]: a == b
Out[74]: array([ True, True, True], dtype=bool)

In [75]: a[2] == b[2]
Out[75]: False

In [76]: type(a[2])
Out[76]: float

In [77]: type(b[2])
Out[77]: float

这几乎就像两个 NaN 对象是通过引用而不是通过值进行比较:

In [79]: id(a[2])
Out[79]: 26438340

In [80]: id(b[2])
Out[80]: 26438340

关于Python numpy nan 在带有字符串的数组中与 true 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27205133/

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