Subtract each column of matrix until -3 is finished
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
For example, i have a matrix a = [0 1 2 3 4]. How do I subtract each column by 1?
a = [0 3 2 6 4]
b = [0 2 1 2 3]
remainder = size(a, 2) - sum(b)
The remainder is -3. I need to minus from b when b(i) ~= 0 so that at the end the b = [0 1 0 1 3].
Thank you.
0 Kommentare
Akzeptierte Antwort
Fangjun Jiang
am 14 Dez. 2011
I am curious too. Let me guess.
a=0:4;
b=-3; % b is an integer, positive or negative
c=zeros(size(a));
ind=find(a,1);
c(ind:ind+abs(b)-1)=-1;
a=a+c
a =
0 0 1 2 4
Updated for a generic solution
b = [0 2 1 2 3]
remainder=-6;
ind=find(b);
while remainder<0 && ~isempty(ind)
if length(ind)<=abs(remainder)
b(ind)=b(ind)-1
remainder=remainder+length(ind)
ind=find(b);
else
for k=1:abs(remainder)
b(ind(k))=b(ind(k))-1
remainder=remainder+1
end
end
end
b =
0 2 1 2 3
b =
0 1 0 1 2
remainder =
-2
b =
0 0 0 1 2
remainder =
-1
b =
0 0 0 0 2
remainder =
0
9 Kommentare
Fangjun Jiang
am 16 Dez. 2011
I am confused with the c and a. I suggest you ask a separate question and use variable name consistently. Also, explain the logic or step. If it's hard to explain, try to show your step and intermediate result if you do it manually, like using a pencil and a piece of paper.
Weitere Antworten (1)
Walter Roberson
am 14 Dez. 2011
Does the minus sign of -3 indicate the third from the start or the third from the end? Your example is ambiguous about that.
Third from the start:
a(1:abs(b)) = a(1:abs(b)) - 1;
Third from the end:
a(1:end-abs(b)+1) = a(1:end-abs(b)+1) - 1;
2 Kommentare
Siehe auch
Kategorien
Mehr zu Spline Postprocessing 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!