Ich brauche den folgenden MATLAB-Code vektorisieren, die für größere Matrizen A und Multiplizität Vektoren m jetzt langsam ist:Vektorisierung des spezifischen Matlab Code
function cA = condenseM(A,m)
% condensation of full matrix A (MxM) to type matrix (MxT)
% m is vector of type multiplicities [m1, ...,mT], where
% M = sum(m)
% M,T
M = sum(m);
T = length(m);
% "0" + last item index over all types
blockTypeIndx = [0 cumsum(m)];
% condensed matrix generation
cA = zeros(M,T);
for i = 1:T
if m(i) > 1
cA(:,i) = max(A(:,blockTypeIndx(i)+1:blockTypeIndx(i+1)),[],2);
else
cA(:,i) = A(:,blockTypeIndx(i)+1:blockTypeIndx(i+1));
end
end
end
Das ist einfach und allgemein genug Beispielfall für die Matrix A (6x6):
A =
0 3 3 | 1 1 | 6
4 0 0 | 0 0 | 2
0 0 0 | 5 0 | 0
0 1 1 | 4 4 | 1
2 0 0 | 0 0 | 5
0 0 0 | 0 3 | 0
m1=3 m2 = 2 m3=1
Multiplizität Vektor m für T = 3 Gehäuse:
m =
3 2 1
Das kondensierte matr ix cA wie folgt aussieht:
cA = condenseM(A,m)
cA =
3 1 6
4 0 2
0 5 0
1 4 1
2 0 5
0 3 0
gibt es keine allgemeinen Einschränkungen sind Merkmale, die Sie kennen? wie in welchem Bereich kann Länge (m), max (m), min (m) oder Größe (A) sein? – Finn
A ist MxM, wobei 30
michalkvasnicka