<p>您可以尝试的一种有效方法是为每行设置位标志(0,3,4)的值是1<;<;0 | 1<;<;3 | 1<;<;4。您将有一个带有旗帜。试试看如果<;<;和|运算符在numpy中工作。
对另一个数组也一样,我猜tf数组只是包裹的numpy。
在拥有2个标志数组后,在这些标志上按位“and”。如果行的条件为true,则结果将至少有两个非零位。也有点可以做也有效率,谷歌为之。你知道吗</p>
<p>这个函数永远不会与float一起工作-您需要将它们转换为非常小的整数。你知道吗</p>
<pre><code>import numpy as np
arr_one = np.array(
[[2, 5, 1],
[1, 6, 4],
[0, 0, 0],
[2, 3, 6],
[4, 2, 4]])
arr_two = np.array(
[[2, 0, 7],
[1, 3, 4],
[5, 5, 6],
[1, 3, 6],
[4, 2, 4]])
print('1 << arr_one.T[0] ' , 1 << arr_one.T[0] )
arr_one_flags = 1 << arr_one.T[0] | 1 << arr_one.T[1] | 1 << arr_one.T[2]
print('arr_one_flags ', arr_one_flags)
arr_two_flags = 1 << arr_two.T[0] | 1 << arr_two.T[1] | 1 << arr_two.T[2]
arr_and = arr_one_flags & arr_two_flags
print('arr_and ', arr_and)
def get_bit_count(value):
n = 0
while value:
n += 1
value &= value-1
return n
arr_matches = np.array([get_bit_count(x) for x in arr_and])
print('arr_matches ', arr_matches )
arr_two_filtered = arr_two[arr_matches > 1]
print('arr_two_filtered ', arr_two_filtered )
</code></pre>