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