A complicated matrix manipulation
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
So I have a matrix, let's say
A = [1 2;
1 0;
3 2;
0 1;
2 1;
1 2];
[r,c] = size(A);
In general, what I would like to do is:
for i = 1:r-1
x = A(6,1)*A(i,1) + A(6,2)*A(i,2);
end
However, here is the issue: if A(i,1) and/or A(i,2) is zero, and let's assume just A(i,1) is 0 and A(i,2) is non-zero, then, instead I would like to do:
x = A(6,1)*A(i-1,1) + A(6,2)*A(i,2);
And in case, even A(i-1,1) is also zero, then, I would like to do:
x = A(6,1)*A(i-2,1) + A(6,2)*A(i,2);
and so on and so forth (same for A(i,2)). Note, A(1,1), A(1,2), A(6,1), A(6,2) are always non-zeros. I am trying to get my head around it, but so far no luck, although it seems it should have a simple and efficient way.
Your help is highly appreciated. Please let me know if anything seems confusing.
Thanks in advance!
2 Kommentare
Stephen23
am 19 Jun. 2020
Your example matrix only has five rows, so none of your example code accessing its (non-existent) sixth row will work.
Akzeptierte Antwort
Stephen23
am 19 Jun. 2020
Bearbeitet: Stephen23
am 19 Jun. 2020
Try this reasonably "simple and efficient way":
r = size(A,1);
x = nan(r,1);
for k = 1:r
r1 = find(A(1:k,1),1,'last');
r2 = find(A(1:k,2),1,'last');
x(k) = A(6,1).*A(r1,1) + A(6,2).*A(r2,2);
end
3 Kommentare
Stephen23
am 19 Jun. 2020
Bearbeitet: Stephen23
am 19 Jun. 2020
'...generalizing it for "n" number of columns of A'
C = cumsum(A(:)~=0,1); % requires that first and last rows do not contain zeros!
B = nonzeros(A);
B = reshape(B(C),size(A));
x = sum(A(6,:).*B,2)
Personally I would just use a loop, as it makes the code intent much clearer.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Number Theory finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!