Assigning values from one array to another if certain specifications are met.

조회 수: 1 (최근 30일)
I have a few arrays
A= 0 1 2 3 6 8 9 10
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B= 20 5 15 10
9 8 2 1
C= 10 15
9 3
Bassically the first row of A contains special points from a line that goes from 0 to 10 and the other two rows are where the values from B( to second row) and C( to third row) should go. Second rows of B and C are corresponding points from the first row of A.
For example. Since B(2,1)=A(1,7) then B(1,1) should go to A(2,7) like this:
A= 0 1 2 3 6 8 9 10
0 0 0 0 0 0 20 0
0 0 0 0 0 0 0 0
The final result should look like this:
A= 0 1 2 3 6 8 9 10
0 10 15 0 0 5 20 0
0 0 0 15 0 0 10 0
I am very much still a beginner in Matlab. I am writing a script that would calculate shear forces and bending moments of a cantilever beam so any advice and/or suggestions would be greatly appreciated.

채택된 답변

Adam Danz
Adam Danz 2020년 4월 13일
Inputs:
A= [ 0 1 2 3 6 8 9 10
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B= [ 20 5 15 10
9 8 2 1];
C= [10 15
9 3];
Solution:
[isMatch, col] = ismember(B(2,:), A(1,:));
A(2,col(isMatch)) = B(1,isMatch);
[isMatch, col] = ismember(C(2,:), A(1,:));
A(3,col(isMatch)) = C(1,isMatch);
Result:
>> A
A =
0 1 2 3 6 8 9 10
0 10 15 0 0 5 20 0
0 0 0 15 0 0 10 0
  댓글 수: 4
Tadas Grauzinis
Tadas Grauzinis 2020년 4월 13일
What does isMatch do in A(2,col(isMatch))?
It seems to work with just col. I understand that if it would be just A(2,col) than it would be reffering to second row all col outputs(which are just what is needed), but what does (isMatch) add?
Adam Danz
Adam Danz 2020년 4월 13일
편집: Adam Danz 2020년 4월 13일
Good question. Suppose matrix B was
B= [ 20 5 15 10
9 8 200 1];
There is no match for 200 so col would return 0 for that match. A(2,col) would then return an error since indices must be positive, non-zero integers. So, col(isMatch) makes sure you're only selecting col values that correspond to matches. It's a safety net.

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

추가 답변 (1개)

Kevin Hellemans
Kevin Hellemans 2020년 4월 13일
편집: Adam Danz 2020년 4월 13일
Hi,
I think this should do the trick:
A= [0 1 2 3 6 8 9 10; ...
0 0 0 0 0 0 0 0; ...
0 0 0 0 0 0 0 0];
B = [20 5 15 10; 9 8 2 1];
C=[10 15; 9 3];
A(2,B(2,:)) = B(1,:);
A(3,C(2,:)) = C(1,:);
disp(A)
  댓글 수: 1
Tadas Grauzinis
Tadas Grauzinis 2020년 4월 13일
It reads the second rows of B and C as a position and places first row elements like this.
A=[ 0 1 2 3 6 8 9 10 0;
10 15 0 0 0 0 0 5 20;
0 0 15 0 0 0 0 0 10]

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

카테고리

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

제품


릴리스

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by