gpt4 book ai didi

python - NumPy,为什么相等性检查不适用于对象数组?

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:23 26 4
gpt4 key购买 nike

具有以下对象数组:

a = np.array([[1], [1, 2], [1, 2, 3], [1], [1]], dtype=object)
b = np.array([(1,), (1, 2), (1, 2, 3), (1,), (1,)], dtype=object)

以下相等性检查不起作用:

a==[1]
#array([False, False, False, False, False], dtype=bool)

b==(1,)
#array([False, False, False, False, False], dtype=bool)

如果我改用字符串:

c = np.array(['[1]', '[1, 2]', '[1, 2, 3]', '[1]', '[1]'])

平等检查有效:

c == '[1]'
#array([ True, False, False, True, True], dtype=bool)

为什么数组检查会这样?

如果我们遍历 a 或 b 并执行检查,它也会给出预期的结果:

[i==[1] for i in a]
#[True, False, False, True, True]

[i==(1,) for i in b]
#[True, False, False, True, True]

谢谢!

最佳答案

NumPy 旨在在许多情况下自动将类似数组的对象视为数组。在这里,NumPy 发现 [1](1,) 是类数组对象并应用 broadcasting规则。任一侧的 Length-1 轴都扩展到另一个对象的相应轴的长度,如果一个对象的维度小于另一个,则缺失的维度将在左侧用另一个对象在这些维度中的长度填充。因此,

a == [1]

给出与

相同的结果
a == numpy.array([1, 1, 1, 1, 1])

这是一个包含 5 个 False 的数组。

关于python - NumPy,为什么相等性检查不适用于对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18030168/

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