Hi,
I have a 3 x 3 matrix, B = [ 1 2 3; 4 5 6; 7 8 9 ]
I have a matrix, A = [ 0 1 0 ]'.
How can I extract only the middle row of matrix B, ie. [ 4 5 6] ?
If I multiply, I get the first and third row with zeros.
This is a simplification of a larger problem. How can I do it via multiplication of A and B?
I want all the rows of B that correspond where the index A equals 1.
Any help would be appreciated!
Thank you,
Inna

댓글 수: 1

Basic logical indexing:
B = [1,2,3;4,5,6;7,8,9];
A = [0;1;0];
C = B(A==1,:)
C = 1×3
4 5 6

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

 채택된 답변

David Goodmanson
David Goodmanson 2020년 12월 21일
편집: David Goodmanson 2020년 12월 21일

0 개 추천

Hi Inna, not done by multiplication, but:
ind = find(A==1)
rows_you_want = B(ind,:)
the colon means to take every column in whatever rows are selected.

댓글 수: 3

Inna Pelloso
Inna Pelloso 2020년 12월 21일
편집: Inna Pelloso 2020년 12월 21일
This is a simplification of a larger problem. How can I do it via multiplication of A and B?
I want all the rows of B that correspond where the index A equals 1.
Thank you!
Inna Pelloso
Inna Pelloso 2020년 12월 21일
Thank you. For some reason, I ALWAYS forget about using the find function.
Stephen23
Stephen23 2020년 12월 21일
편집: Stephen23 2020년 12월 21일
FIND is not required, logical indexing is simpler and more efficient:
ind = A==1;
rows_you_want = B(ind,:)

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

추가 답변 (1개)

Walter Roberson
Walter Roberson 2020년 12월 21일
편집: Walter Roberson 2020년 12월 21일

1 개 추천

This is a task that cannot be done by multiplication.
If you use .* elementwise multiplication then the size of the result is max() of the sizes of the inputs provided they are compatible sizes. Saying max() takes into account implicit expansion. The size of output never depends on the content of the data when you use .*
If you use A*B then size(A, 2) must equal size(B, 1) and the size of the output is always size(A, 1) by size(B, 2) no matter what the content of the variables are.
You can create projection matrices that select specific rows, but the size of the matrices depend on the number of rows being selected, so they have to be constructed outside of plain matrix multiplication.

댓글 수: 1

P = eye(size(B))
P = P(logical(A), :)
C = P * B
But you cannot construct P using just matrix multiplication without making decisions based on the content of A

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

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

질문:

2020년 12월 21일

편집:

2020년 12월 21일

Community Treasure Hunt

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

Start Hunting!

Translated by