【发布时间】:2015-10-15 14:05:21
【问题描述】:
我正在寻找一种有效获取布尔数组的方法,其中给定两个大小相等的数组a 和b,如果a 的对应元素出现in,则每个元素都为真b的对应元素。
例如下面的程序:
a = numpy.array([1, 2, 3, 4])
b = numpy.array([[1, 2, 13], [2, 8, 9], [5, 6], [7]])
print(numpy.magic_function(a, b))
应该打印
[True, True, False, False]
记住这个函数应该相当于
[x in y for x, y in zip(a, b)]
仅numpy-针对a 和b 很大且b 的每个元素都相当小的情况进行了优化。
【问题讨论】:
-
旁白:如果你关心效率,你不应该使用像
b这样的数组:而不是一个快速的 numpy 二维数组 int dtype 你只有一个对象 dtype 的一维数组。 -
公平地说,首当其冲的工作(检查整数是否在 numpy 数组中)由您的列表理解处理。这可能是最有效(而且绝对是最 Pythonic)的方式。
-
@Kupiakos 好点子,我忘了补充一点,我正在寻找的用例是针对大
a和b,而b的每个元素都很少。跨度> -
由于
b的元素长度不同,它作为一个数组没有什么意义。要么把它变成一个真正的二维数组,要么把它当作一个列表。
标签: python arrays numpy boolean