두 가지 벡터 목록이 있습니다.배열의 두 목록의 외부 제품을 어떤 병렬 방식으로 효율적으로 계산하는 방법은 무엇입니까?
A = np.random.rand(100,2000)
B = np.random.rand(100,1000)
은 그때 그때 제 등을 제, (B)의 첫 번째 엔트리와의 첫 번째 항목의 외적을 계산해야한다.
본래의 루프
outers = []
for a, b in zip(A,B):
outers.append(np.outer(a,b))
내 컴퓨터 (&&timeit
통해) ≈ 730 [MS] 걸린다.
결국 outers
은 100x1000x1000 배열의 긴 목록입니다.
을 B[0]
및 THEN A[1] B[1]
으로 실제로 계산하기 때문에 더 효율적으로이 작업을 병렬 처리해야합니다. 여기서 우리는 모두 독립적으로 병렬 처리 할 수 있습니다.
[Question] (https://stackoverflow.com/questions/27809511/efficient-outer-product-in-python) –
'braodcasting'을 사용하십시오 :'A [:, :, 없음] * B [:, 없음]'. – Divakar
@Divakar 아무 방법도 700ms보다 빠릅니다. 브로드 캐스팅은 750ms, einsum은 900ms입니다. – Swift