如何在numpy中为没有循环的多个整数类型创建布尔索引
我想为数组创建一个布尔索引,每当给定列表中的任何整数出现在数组中时,该索引都具有真值。现在,我通过循环测试整数列表来实现这一点,并为每个测试整数构建一个单独的布尔掩码,我将它们按位如何在numpy中为没有循环的多个整数类型创建布尔索引,numpy,Numpy,我想为数组创建一个布尔索引,每当给定列表中的任何整数出现在数组中时,该索引都具有真值。现在,我通过循环测试整数列表来实现这一点,并为每个测试整数构建一个单独的布尔掩码,我将它们按位或组合在一起,如下所示: boolean_mask = original_array == list_of_codes[0] for code in list_of_codes[1::]: boolean_mask = boolean_mask | (original_array == code) 有没有简写
或组合在一起,如下所示:
boolean_mask = original_array == list_of_codes[0]
for code in list_of_codes[1::]:
boolean_mask = boolean_mask | (original_array == code)
有没有简写的numpy符号可以在没有循环的情况下进行等效?我想你可以写:
boolean_mask = (original_array == list_of_codes)
如果这是错误的,请给出一个小的测试示例,这样我可以确保我知道您正在尝试做什么。您有:
我应该这样做。请注意,np.in1d
会将两个数组展平,因此,如果您的原始_数组是多维数组,则必须将其重新整形,例如:
boolean_mask = boolean_mask.reshape(original_array.shape)
那不行。您可以按照np.logical\u或.reduce(原始的\u数组[…,np.newaxis]==list\u of \u code,axis=-1)
的思路做一些事情,但它可以创建一个巨大的中间数组,这取决于list\u of \u code
的大小,所以性能可能不会太好。@Jamie的答案np.ind有效,您的示例给出了“False”。这里有一个例子:np.array([0,1,2,3,4])==[1,2]我想产生[False,True,True,False,False],但是这个例子只产生False。
boolean_mask = boolean_mask.reshape(original_array.shape)