hi there,
I have an array lets say
A=[10 9 10; 1 2 3; 4 5 6]
How can create an array like this?
B=[10-1 9-2 10-3;10-1-4 9-2-5 10-3-6]
thanks in advance!
Nikolas

 採用された回答

Star Strider
Star Strider 2017 年 1 月 21 日
編集済み: Star Strider 2017 年 1 月 21 日

1 投票

If I understand correctly what you are asking, this will work:
A=[10 9 10; 1 2 3; 4 5 6]
B = cumsum(-A(2:end,:))+A(1,:)
A =
10 9 10
1 2 3
4 5 6
B =
9 7 7
5 2 1

9 件のコメント

Walter Roberson
Walter Roberson 2017 年 1 月 22 日
Alternately
A(1,:) - cumsum(A(2:end,:))
My first mental version was indeed in terms of negating and then cumsum, but then I realized that wasn't necessary.
Nikolas Spiliopoulos
Nikolas Spiliopoulos 2017 年 1 月 22 日
Yeah that's exactly what i mean thanks a lot!!
Star Strider
Star Strider 2017 年 1 月 22 日
Our pleasure!
Nikolas Spiliopoulos
Nikolas Spiliopoulos 2017 年 1 月 22 日
hi again, I tried it but I get an error "matrix dimensions must agree"! any ideas how to fix it? thanks
Star Strider
Star Strider 2017 年 1 月 22 日
Please post your matrix and code. That error should not occur with the sort of matrix you originally posted.
Nikolas Spiliopoulos
Nikolas Spiliopoulos 2017 年 1 月 22 日
編集済み: Nikolas Spiliopoulos 2017 年 1 月 22 日
>> A=[10 9 10; 1 2 3; 4 5 6] B = cumsum(-A(2:end,:))+A(1,:)
A =
10 9 10
1 2 3
4 5 6
Error using "+ " Matrix dimensions must agree.
Star Strider
Star Strider 2017 年 1 月 22 日
The most recent versions of MATLAB do this minimal expansion automatically. Somewhat less recent versions require the bsxfun function to do the same operation.
This should work for you:
B = bsxfun(@minus, A(1,:), cumsum(A(2:end,:)));
(I tested it, and it gives the same result as our eariler code versions.)
Nikolas Spiliopoulos
Nikolas Spiliopoulos 2017 年 1 月 22 日
ok got it, it works! thanks again mate..!!!
Star Strider
Star Strider 2017 年 1 月 22 日
Our pleasure!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by