Python 如果任何值满足掩码要求,则为整个数组返回True/False

Python 如果任何值满足掩码要求,则为整个数组返回True/False,python,Python,我已经试过看其他类似的帖子,但是他们的解决方案并不能解决这个具体问题。使用这个答案,我发现我得到了一个错误:包含多个元素的数组的真值是不明确的。使用a.any或a.all,因为我定义的数组与他们的不同。他们的数组大小是n,而我的数组大小是n,m。此外,这个解决方案也不起作用,因为它适用于列表。我能想到的唯一方法是: 当数组中至少有1个True时,则整个数组被视为True: filt = 4 tracktruth = list() arraytruth = list() arr1 = np.arr

我已经试过看其他类似的帖子,但是他们的解决方案并不能解决这个具体问题。使用这个答案,我发现我得到了一个错误:包含多个元素的数组的真值是不明确的。使用a.any或a.all,因为我定义的数组与他们的不同。他们的数组大小是n,而我的数组大小是n,m。此外,这个解决方案也不起作用,因为它适用于列表。我能想到的唯一方法是:

当数组中至少有1个True时,则整个数组被视为True:

filt = 4
tracktruth = list()
arraytruth = list()
arr1 = np.array([[1,2,4]])
for track in range(0,arr1.size):
    if filt == arr1[0,track]:
        tracktruth.append(True)
    else:
        tracktruth.append(False)

if any(tracktruth):
    arraytruth.append(True)
else:
    arraytruth.append(False)
如果数组中没有一个True,则整个数组被视为False:

filt = 5
tracktruth = list()
arraytruth = list()
arr1 = np.array([[1,2,4]])
for track in range(0,arr1.size):
    if filt == arr1[0,track]:
        tracktruth.append(True)
    else:
        tracktruth.append(False)

if any(tracktruth):
    arraytruth.append(True)
else:
    arraytruth.append(False)

第二条if-else语句之所以存在,是因为我希望将此掩码应用于多个数组,并最终创建一个主列表,以描述哪些数组是真的,哪些是假的。但是,对于一个for循环和两个if-else语句,我认为对于较大的数组来说,这将非常缓慢。有什么更快的方法可以做到这一点?

您可以通过列表理解来做到这一点。我在这里为一个数组完成了这项工作,但它很容易通过for循环扩展到多个数组

filt = 4
arr1 = np.array([[1,2,4]])
print(any([part == filt for part in arr1[0]]))
通过对大小为n,m的数组的列表理解,您可以更一般地获得数组真相

import numpy as np

filt = 4
a = np.array([[1, 2, 4]])
b = np.array([[1, 2, 3],
              [5, 6, 7]])

array_lists = [a, b]

arraytruth = [True if a[a==filt].size>0 else False for a in array_lists]

print(arraytruth)
这将为您提供:

[True, False]

这似乎太复杂了,您可以使用布尔索引来实现没有循环的结果

arr1=np.array([[1,2,4]])

filt=4

arr1==filt

array([[False, False,  True]])

np.sum(arr1==filt).astype(bool)

True
对于多行,可以使用np.sum中的行或列索引,也可以使用axis参数对行或列进行求和

正如注释中指出的,您可以使用np.any而不是np.sum…astypebool,它在测试数据集上运行的时间大约为2/3:

np.any(a==filt, axis=1)

array([ True])

[编辑]使用numpy hstack方法

过滤器=4 arr=np.数组[[1,2,3,4],[1,2,3]] 打印任意[x代表np.hstackarr中的x,如果x所以你只想检查值是否在嵌套数组中?有什么例子吗?any不能给出你想要的结果?@pierogi为了清晰起见,我编辑了我的原始帖子。我想看看是否有任何值小于定义的数值。@HeapOverflow我编辑了原始帖子以显示这两个实例。我仍然没有真正看到测试数据。我看到了一堆代码,不清楚它是否正确,但我真的看不到什么是输入数据,什么是期望的输出数据。非常简单和酷的方法。几乎只需要两行。我不知道可以这样添加逻辑。操作的矢量化是numpy真正的亮点。虽然有些情况下需要在numpy中循环,但它们实际上比正常情况更多。干杯这与arr1==filt.any不同吗?很好的调用,已编辑。我使用np.any而不是array.any来匹配我的答案的其余部分,但同样的原则适用