# 1 접근 : 그들은 부울 배열 인 경우이 AND-ing
곱셈보다 더 좋을 수도 -
((A & B) == A).all()
접근 방법 # 2 : -
np.count_nonzero(A & B) == np.count_nonzero(A)
진정한 가치의 계산에 또 다른 런타임 테스트 -
In [225]: A = np.random.rand(512,512,512)>0.5
...: B = np.random.rand(512,512,512)>0.5
In [226]: %timeit np.all((A * B) == A)
...: %timeit ((A & B) == A).all()
...: %timeit np.count_nonzero(A & B) == np.count_nonzero(A)
10 loops, best of 3: 170 ms per loop
10 loops, best of 3: 169 ms per loop
10 loops, best of 3: 57.7 ms per loop
접근 # 3 :은 기본적으로 해당 B
이되지 않은, 어떤 A
사실이 있는지 찾고 numba 수준에서 누전 -이 Short-circuiting
와
from numba import njit
@njit
def numba_app(a, b):
l = len(a)
out = True
for i in range(l):
if a[i] & ~b[i]:
out = False
break
return out
out = numba_app(A.ravel(), B.ravel())
타이밍 방법은 데이터에 따라 다릅니다.
멋진데, 접근 # 2가 실제로 교차로입니까? 내 경우는 아니지만 두 배열의 위치가 다른 구멍의 수가 같으면 일치하지 않아도 사실로 평가할 수 있습니다. – filippo
@filippo 서로 다른 위치에 같은 개수의 구멍이 있다면 'A & B'는'A '의 True 값보다 더 작은 True 값을가집니다. 그것이 작동하는 이유입니다. 중요한 것은 내가 A & B에 Trues를 세고 있다는 것입니다. 어쩌면 혼란스러워 할 수 있습니다. – Divakar
어, 네가 맞아! 휴식을 취하고 커피를 마시는 시간은 아마도 ... 감사합니다. – filippo