2017-03-01 1 views
0

나는 1000x1000 행렬 A (0에서 150까지의 값을 포함한다)와 181x1 벡터 B를 가지고있다. 행렬 A에서 같은 크기의 A를 유지하면서 B에있는 값만 유지하기를 원한다. . ismember 함수로 시도했지만 예상 한 결과를 제공하지 않습니다. 그래서 여기에 다른 기능 을 시도 내가 코드funtion intersect와 함께 행렬 치수 오류를 해결하는 방법은 무엇입니까?

A=A.*intersect(A,B,'stable'); 

로 할 것입니다하지만이 오류 나는 문제를 해결 할 수있는 방법

Error using .* 
Matrix dimensions must agree. 

있나요?

+0

B가 아닌 A의 요소 값은 어떻게되어야합니까? 괜찮아? –

+0

예, 지금은 0이된다는 사실을두고합니다. –

답변

2

다음과 같이 당신이 필요로하는 모든이 작업에 대한 ismember입니다 :

A = A.*ismember(A,B); 
% ismember(A,B) gives the logical matrix containing 1's for the indexes whose values 
% are present in `B` and 0's for all other indexes. When this logical matrix is 
% element-wise multiplied with A, all the indexes of A whose elements are not in B 
% become zero 

왜 코드가 작동하지 않는 이유는 무엇입니까? 때문에와 intersect(A, B, 'stable')

, 당신은 A의 요소의 수와 동일한 수보다 작거나 (아마도)를 포함하는 열 벡터를 (매우 적은 아마도) 얻을. 동일한 경우에도 A은 열 벡터가 아니므로 A으로 요소를 곱하면 같은 오류가 발생합니다. 엘리먼트 - 와이즈 곱셈은 행렬의 각 엘리먼트가 다른 행렬의 대응하는 엘리먼트와 곱해질 수 있기 때문에 양쪽 행렬의 순서가 동일해야만한다.

위에서 설명한 코드 ismember은 이미 설명 된대로 처리됩니다.

+1

답변 해주세요 :) –

1

두 개의 행렬 AB을 임의의 숫자로 만듭니다. CAB에있는 값을 가진 배열이며 ismember을 사용하여 A의 값을 선택할 수 있습니다.

A = randi([0 150], 1000, 1000); 
B = randi([0 150], 181, 1); 
C = intersect(A, B, 'stable'); 
A(~ismember(A, C)) = 0; 
관련 문제