首页 > 解决方案 > 使用 numpy.where() 和 or 语句会给我一个关于模糊值的错误

问题描述

我正在尝试为一个项目从多个数组中选择值,但是伴随它的布尔值出现了问题。我有两个名为“zdat”和“photdat”的数据文件,每个文件有超过 5000 个值。我需要使用两者的质量标志将它们稀疏到一个新数组中。对于 zdat 文件,我需要标志为 3 或 4,所以我想我可以将其插入到 numpy.where 函数中,但我不断收到相同的错误:“具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()"。我查看了它们的作用,并尝试将它们添加到代码中以允许我使用 OR 语句,但我不断收到错误消息。numpy.where 函数的其余部分在没有 or 语句的情况下工作,但我需要 or 语句来选择高质量的数据。

izspec = np.where(np.any(zdat['spec_z'] == 3 or 4) & (photdat['totmask'] == 0) & (photdat['K_flag'] == 0) & (goodmag < 23))

我希望它将我的数据从大约 5000 稀疏到大约 170ish(我被告知好的数据点的数量)。如果我将其设置为“zdat['spec_z'] == 3”或“zdat['spec_z'] == 4”,那么其中任何一个分别给我大约 60-80 分,但这些标志中的每一个都被认为是“好“所以我两者都需要。

标签: pythonnumpyboolean

解决方案


不能像这样使用布尔测试:

(at['spec_z'] == 3 or 4) # BAD!

您需要重复测试,如下所示:

(at['spec_z'] == 3 or at['spec_z'] == 4)

或者像这样:

(at['spec_z'] in (3, 4))

推荐阅读