행렬의 각 행에 임의의 숫자를 곱하고 싶습니다. rand()
의 항목을 포함하는 크기 TxN
의 대각 행렬 및 R
매우 큰T
및 N
규모 NxM
의 매트릭스와 X
행렬의 각 행에 임의의 숫자를 곱하는 가장 좋은 방법
Y = R*X
. 내가 사용하는 순간
r = rand(T)
Y = scale(r, X)
그러나 이것이 더 빠르고 더 나은지 궁금합니다. 예를 들어, 벡터 r
을 만들 필요는 없다고 생각하지만, y[i] = rand()*X[i,:]
을 효율적으로/병렬로 호출하는 방법을 모르겠습니다.
귀하의 경우'scale() '을 호출하는 것과 비교하여'r'을 만드는 데 얼마나 오래 걸립니까? –
임시 'r'을 만들고 싶습니다. 그 이유는 행에 의해'X '를 트래버스하는 것이 지독히 비효율적이기 때문에, 컬럼별로 트래버스하는 것이 5-10 배 더 빠릅니다. 따라서이 경우 임시 'r'을 할당하고 열을 (즉 메모리 저장 순서로) 'X'를 이동하면 큰 이점을 얻게됩니다. 특히 'X'와 'r'이 'Float32'인 경우이 경우 SIMD가 벡터화되어야합니다. – tholy