ベクトル化を使用して、次のMATLABコードを高速化するにはどうすればよいですか?現在、ループ内の単一の行は、ケースupper = 1e7
のために何時間も実行されています。高価なループを高速化するMatlabのベクトル化
p = 8;
lower = 1;
upper = 1e1;
n = setdiff(lower:upper,primes(upper)); % contains composite numbers between lower + upper
x = ones(length(n),p); % Preallocated 2-D array of ones
% This loop stores the unique prime factors of each composite
% number from 1 to n, in each row of x. Since the rows will have
% varying lengths, the rows are padded with ones at the end.
for i = 1:length(n)
x(i,:) = [unique(factor(n(i))) ones(1,p-length(unique(factor(n(i)))))];
end
出力:ここ
サンプル出力とコメントコードである
x =
1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1
2 3 1 1 1 1 1 1
2 1 1 1 1 1 1 1
3 1 1 1 1 1 1 1
2 5 1 1 1 1 1 1
例えば、我々はものを無視した場合、最後の行は、10の素因数を含んでいます。私は行列を8列幅にし、1000万までの数の多くの素因数を説明しました。
ありがとうございました!
あなたは 'parfor'ループを使用することができます。 – Eskapp