【问题标题】:ValueError from simple Numpy comparison [duplicate]来自简单 Numpy 比较的 ValueError [重复]
【发布时间】:2025-12-21 23:40:09
【问题描述】:

我遇到了一个 python 问题,我尝试了各种方法,但都无法解决。你能给我一些提示吗?

sp_step = np.linspace(0.0,2.0,41)  ####  bin size is 50 Kpc
for jj in range(len(sp_step) -1):
    if sp > sp_step[jj] and sp <= sp_step[jj+1]:
        stack_num[jj] += 1
        stack[jj] = map(add,stack[jj],flux_inteplt)

我定义了一个叫sp_step的numpy数组,我要做的就是用变量sp来查找数据在哪个段,然后将对应的数据进行堆叠。

但它说

if sp > sp_step[jj] and sp <= sp_step[jj+1]:

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

我用谷歌搜索了这个错误,尝试了 np.logical_and,但没有用。

谢谢。

【问题讨论】:

  • 什么是sp?请注意,搜索此错误会返回大量结果。我想你都读过吧?

标签: python numpy


【解决方案1】:

这是比较常见的 SO numpy 问题之一。这是一些 numpy 测试产生多个值的结果,然后尝试在只需要一个值的 Python 上下文中使用它。

看看这个表达式(打印它的结果)

sp > sp_step[jj] and sp <= sp_step[jj+1]

您可能需要添加一些 () 以确保在 &amp; 之前执行两个相等测试(and 是 Python 的运算符,需要标量布尔值)。

(sp > sp_step[jj]) & (sp <= sp_step[jj+1])

要与if 一起使用,它必须只返回一个值。

在测试numpy 数组时,最好使用掩码而不是迭代。

mask = (sp>sp_step) & (sp <= sp_step)
sp_step[mask] ...

通常它比迭代更快,但它可能需要重新考虑问题。在任何情况下,ValueError 是多个值 numpy 逻辑运算与标量 Python 运算混合的结果。

【讨论】:

  • 很抱歉在你身上重复关闭这个,但在我查看时你确实获得了一些支持。是的,这是一个常见问题,您也经常回答。我希望我能为这个错误找到一个规范的问答。