나는 모양 (100000,)의 numpy 배열 'arr'가 있습니다. 100000X100000 모양의 numpy 행렬 'res_matrix'를 만들어야합니다.
for i in range(res_matrix.shape[0]):
for j in range(res_matrix.shape[1]):
res_matrix[i][j]= arr[i]*arr[j]
샘플 입력 / 출력
arr=[1 2 4]
Output:
res_matrix:
[[1 2 4]
[2 4 18]
[4 8 16]]
루프에서 00000X100000을 계산하는 계산 시간을 줄이기 위해이 작업을 벡터화하는 방법이 있습니까?
외부 곱셈을 얻을 수있는 몇 가지 방법이 있습니다.
arr = np.array([1,2,4])
#Using Multiply outer
print(np.multiply.outer(arr, arr)) #As suggested by Warren
#Using broadcasting
print(arr[:,None] * arr[None,:]) #(3,1) * (1,3)
[[ 1 2 4]
[ 2 4 8]
[ 4 8 16]]
[[ 1 2 4]
[ 2 4 8]
[ 4 8 16]]
참고로, 출력은 여전히 메모리에 저장하기위한 매우 큰 행렬입니다. 필요한 것에 따라 생성기 함수와 같은 것을 고려하는 것이 좋습니다. 이 행렬을 어떻게 사용할 것인지 알려 주시면 더 많은 메모리 효율적인 방법을 제안 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다