gpt4 book ai didi

python - 检查 NumPy 数组是否在 Python 列表中

转载 作者:行者123 更新时间:2023-12-04 15:27:02 25 4
gpt4 key购买 nike

我有一个 numpy 数组列表,我想检查给定数组是否在列表中。这有一些非常奇怪的行为,我想知道如何解决它。这是问题的简单版本:

import numpy as np
x = np.array([1,1])
a = [x,1]

x in a # Returns True
(x+1) in a # Throws ValueError
1 in a # Throws ValueError

我不明白这是怎么回事。这个问题有好的解决方法吗?

我正在使用 Python 3.7。

编辑:确切的错误是:

ValueError: The truth value of an array with more than one element is ambiguous.  Use a.any() or a.all()

我的 numpy 版本是 1.18.1。

最佳答案

原因是in或多或少被解释为

def in_sequence(elt, seq):
for i in seq:
if elt == i:
return True
return False

并且 1 == x 不给出 False 而是引发异常,因为在内部 numpy 将其转换为 bool 数组。它在大多数情况下确实有意义,但在这里它给出了一个愚蠢的行为。

这听起来像是一个错误,但并不容易修复。处理 1 == np.array(1, 1)np.array(1, 1) == np.array(1, 1) 是一个主要的 NumPy 的特点。将相等比较委托(delegate)给类是 Python 的一大特点。所以我什至无法想象正确的行为应该是什么。

TL/DR:切勿混合使用 Python 列表和 numpy 数组,因为它们具有非常不同的语义,并且混合会导致不一致的极端情况。

关于python - 检查 NumPy 数组是否在 Python 列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62058337/

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