Wie kann ich den folgenden MATLAB-Code mit Vektorisierung beschleunigen? Momentan benötigt die einzelne Zeile in der Schleife Stunden für den Fall upper = 1e7
. HierVektorisierung in Matlab zur Beschleunigung teurer Schleife
ist der kommentierten Code mit Beispielausgabe:
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
Ausgang:
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
Zum Beispiel die letzte Zeile enthält die Primfaktoren von 10, wenn wir diejenigen ignorieren. Ich habe die Matrix 8 Spalten breit gemacht, um die vielen Primfaktoren von Zahlen bis zu 10 Millionen zu berücksichtigen.
Danke für jede Hilfe!
Sie könnten eine 'parfor' Schleife verwenden, wenn Sie Zugriff auf die Parallel Computing Toolbox haben. – Eskapp