Question about assigning value in a matrix.

6 ビュー (過去 30 日間)
C Zeng
C Zeng 2013 年 6 月 6 日
Hi, all, again, I want to do the work quickly: I have a large matrix A, and I want to assign value in some entry in each row.
For example:
A=zeros(4);
a=[1,2;
2,3;
3,2;
4,1];
I want (1,2), (2,3),(3,2), (4,1) of matrix A be 1. How shall I make it work in no more than 3 commands?
What I am doing now is using loops:
for i=1:4
A(a(i,1),a(i,2)=1;
end
However, as i is very large like 3^14, the program is very slow. So I wonder is there a way to speed the programming?
Thanks.

採用された回答

Walter Roberson
Walter Roberson 2013 年 6 月 6 日
idx = sub2ind(size(A), [1 2 3 4], [2 3 2 1]);
A(idx) = 1;
  3 件のコメント
Sean de Wolski
Sean de Wolski 2013 年 6 月 6 日
I've always found for-loops to be significantly faster than sub2ind and ind2sub. Especially as the number of indices gets large.
It's been a few years since I was timing it for my own work though...
C Zeng
C Zeng 2013 年 6 月 6 日
Oh, really? I always found that MATLAB is not efficient for large loops. That is why I tried to avoid large loops.

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

その他の回答 (2 件)

Azzi Abdelmalek
Azzi Abdelmalek 2013 年 6 月 6 日
A=zeros(4);
a=[1,2;
2,3;
3,2;
4,1];
idx= sub2ind(size(A),a(:,1),a(:,2));
A(idx)=1
  1 件のコメント
C Zeng
C Zeng 2013 年 6 月 6 日
Yes, Azzi! Thanks.

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


Sean de Wolski
Sean de Wolski 2013 年 6 月 6 日
I've always found for-loops to be significantly faster than sub2ind and ind2sub. Especially as the number of indices gets large.
It's been a few years since I was timing it for my own work though...
  12 件のコメント
C Zeng
C Zeng 2013 年 6 月 7 日
Thanks, Sean!
Let me try it again. I have to run large data on server, because 3^12 is memory out here.
C Zeng
C Zeng 2013 年 6 月 13 日
Sean, thanks for your advice. My program got speedup. sub2ind will be faster if the size is large.

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

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by