Subtract each column of matrix until -3 is finished
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Fangjun Jiang
2011 年 12 月 14 日
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 件のコメント
Fangjun Jiang
2011 年 12 月 16 日
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.
その他の回答 (1 件)
Walter Roberson
2011 年 12 月 14 日
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 件のコメント
参考
カテゴリ
Help Center および File Exchange で Spline Postprocessing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!