for ループをベクトル化する方法ですが、その中に条件が含まれていますか? (主にMatlabで)
** 乗算する行列 ** がバイナリ値 ( 0 または 1) ** に基づいて選択され、別の行列と乗算されて反復ごとに更新される累積積を計算する for ループ。私は1億ポイントを持っているので、これを非常に速く行うのは良いことです. 可能であれば、ベクトル化が大いに役立ちます。
[sizMat1 sizMat2] = size(matrixToMultiply);
cumulMatProduct = ones(sizMat1,1); %stores the cumulative Products of chosen Matrices.
%gets updated at every iteration
for ix = 2:length(col1)
% Depending on if the value is either 0 or 1, pick a matrix;
if (col1(ix) == 0 )
cumulProduct = simpleMatrix0 * cumulMatrixProduct;
matrixToMultiply = matrix1;
elseif (col1(ix) == 1 )
matrixToMultiply = matrix2;
end
anotherMatrixtoMultiply = diag( exp(constantMatrix) * col2(ix) );
% Another Matrix is created by multiplying a scalar
%(picked from the same index ix of a different column col2 having same dimensions as col1)
cumulMatrixProduct = matrixToMultiply*anotherMatrixtoMultiply*cumulMatrixProduct;
end
% matrixToMultiply is 101 x 101
% constantMatrix is 101 by 1
% anotherMatrixtoMultiply is 101 by 101
% cumulMatrixProduct = 101 x 1 (Result )
前もって感謝します。