행렬 Q와 행 벡터 r이 있다고 가정하십시오.행렬에서 일치하는 행을 찾으십시오.
Q = [ 1 2 3 ; 4 2 3 ; 5 6 7 ; 1 2 3 ; 1 2 3 ; 1 2 5 ];
r = [ 1 2 3 ];
지정된 열에서 R (모든 요소) Q의 행 중 어느 동일 나타내는 (m 길이의) 논리 벡터를 획득하는 가장 쉬운 방법은 무엇인가?
[ 1 0 0 1 1 0 ];
행렬 Q와 행 벡터 r이 있다고 가정하십시오.행렬에서 일치하는 행을 찾으십시오.
Q = [ 1 2 3 ; 4 2 3 ; 5 6 7 ; 1 2 3 ; 1 2 3 ; 1 2 5 ];
r = [ 1 2 3 ];
지정된 열에서 R (모든 요소) Q의 행 중 어느 동일 나타내는 (m 길이의) 논리 벡터를 획득하는 가장 쉬운 방법은 무엇인가?
[ 1 0 0 1 1 0 ];
당신은 ismember
를 사용하고 그것을 할 수 있습니다 한 줄에 :
>> ismember(Q,r,'rows')'
ans =
1 0 0 1 1 0
all(bsxfun(@eq, r, Q),2)'
bsxfun(@eq, r, Q)
되어야 상기 시료 경우
>> bsxfun(@eq, r, Q)
ans =
1 1 1
0 1 1
0 0 0
1 1 1
1 1 1
1 1 0
all
함수는 경우 계산을 bsxfun의 결과는 각 행을 따로 따로 모두 true입니다. 따라서 반환 :
>> all(ans,2)'
ans =
1 0 0 1 1 0
와 그래, 또한 원하는 행 출력을 일치하는 전치 연산자 '
이
가치가 매우 적기 때문에 더 느리다는 점을 유의하십시오 –
repmat
와
쉬운 방법 :
a = [1 2 3; 4 5 6; 7 8 9];
t = [4 5 6];
[x,y] = size(a);
r = all(a==repmat(t,y,1), 2)'
덜 효율적이고 느린, http://blogs.mathworks.com/loren/2008/08/04/comparing-repmat-and-bsxfun-performance/#9 –
효율성이 필요하지 않은 곳에는 저주가 있습니다. 작성하고 이해하는 단순성은 더 나은 코드와 직접적으로 관련됩니다. – Castilho
'bsxfun (@eq, r, Q)'에 대해 이해하기 어려운 내용은 무엇입니까 ?? 쉬운 예제로 배우면 나중에 복잡한 문제에 적용 할 때 도움이됩니다. –
a = [1 1 1; 2 2 2; 3 3 3];
b = a(1:2,;);
[temp locb] = ismember(a,b,'rows');
b(locb(locb~=0),:)
ans =
1 1 1
2 2 2
매우 밀접하게 관련되어 있습니다 : http://stackoverflow.com/questions/6209904/find-given-row-in-a-matrix – neuronet