필터 지우기
필터 지우기

How to quickly assign the values of a matrix using a given array?

조회 수: 2 (최근 30일)
Benson Gou
Benson Gou 2021년 5월 23일
댓글: DGM 2021년 5월 24일
Dear All,
I have an array A which contains two columns of integers. I want to build a matrix B in the following way.
For example,
A = [2 9; 1 5; 8 3]
A = 3×2
2 9 1 5 8 3
The matrix B should be suilt as follows:
B = [0 1 0 0 0 0 0 0 -1 0; 1 0 0 0 -1 0 0 0 0 0; 0 0 -1 0 0 0 0 1 0 0]
B = 3×10
0 1 0 0 0 0 0 0 -1 0 1 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0
How can I create matrix B for a goven A?
Thanks.
Benson

채택된 답변

DGM
DGM 2021년 5월 23일
편집: DGM 2021년 5월 23일
Here is one way:
A = [2 9; 1 5; 8 3]
A = 3×2
2 9 1 5 8 3
s = [size(A,1) 10]; % you're going to have to specify the output width
B = zeros(s);
B(sub2ind(s,(1:s(1)).',A(:,1))) = 1;
B(sub2ind(s,(1:s(1)).',A(:,2))) = -1;
B % show the result
B = 3×10
0 1 0 0 0 0 0 0 -1 0 1 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0
  댓글 수: 2
Benson Gou
Benson Gou 2021년 5월 23일
Hi, DGM,
Thanks for your quick reply.
I run your code. it took 0.0107 second, much less than original 0.15 second. But when I tried to use sparse to reduce the CPU time futher, but it took 0.13 second. I want the final matrix B is sparse.
Thanks.
Benson
DGM
DGM 2021년 5월 24일
I really have no familiarity with handling sparse matrices or how to optimize for them. I'm sure someone else can though.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Walter Roberson
Walter Roberson 2021년 5월 23일
S = 10;
A = [2 9; 1 5; 8 3]
A = 3×2
2 9 1 5 8 3
(A(:,1) == (1:S))-(A(:,2) == (1:S))
ans = 3×10
0 1 0 0 0 0 0 0 -1 0 1 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0

카테고리

Help CenterFile Exchange에서 Downloads에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by