0

다차원 배열의 요소 방향 조건을 Matlab의 하나의 논리 변수로 줄이는 가장 우아한 방법은 무엇입니까? if 조건과 주장이 많은 큰 프로젝트에이 작업이 필요합니다. Matlab 설명서 about logical arraysfind array elements에는이 문제에 대한 해결 방법이 없습니다.Matlab에서 다차원 배열의 여러 요소 방향 조건 중 하나의 논리 변수 추출

A = [0,1;0,0] 
B = [0,1;1,0] 

내 바람직한 용액 원경된다 :

myBool = any(A(:)==1 & B(:)==1) 

행렬 AB 동일한 위치에서 두 사람이 존재 IFF에

예를 들어, 논리 변수 myBool는 사실 그러나 최단 솔루션처럼 보이지는 않으며 배열 인덱싱에서는 작동하지 않습니다.

매우 읽을 수있는 짧은하지만 솔루션 :

myBool = any(A(B==1)) 

가장 큰 문제는 높은 차원 배열에 대한 nnz 같은 기능()뿐으로, 콜론 (:)없이 하나 개의 차원으로 순서를 줄일 수 있다는 것입니다 콜론은 배열의 일부를 인덱싱 할 수 없습니다.

+0

: 당신은 선형 인덱싱을 사용할 수있는 대안

fhVec = @(T)(T(:)); bFlag = any(fhVec(A(rowIndices, colIndices) & B(rowIndices, colIndices))); 

: 당신은 작은 후 vectorising 익명 기능을 사용할 수 있습니다. 그러나 당신은 그것이 아니라고 말합니다. 왜 그럴 수 있니? 배열 인덱싱에서 작동하지 않는다는 것은 무엇을 의미합니까? –

+0

어떻게 든 콜론 운영자를 우회하는 것이 가능할 것이라고 생각했습니다. @Dylan Richard Muir의 해결책은 색인 생성 문제를 해결합니다. – JaBe

답변

1

먼저 logical 클래스의 매트릭스를 사용하는 경우 1과 같은지 테스트 할 필요가 없습니다.

인덱싱 제외하고, 가장 좋은 방법은 다음과 같습니다 인덱싱이 필요하면

bFlag = any(A(:) & B(:)); 

, 당신은 두 가지 옵션이 있습니다. 당신의 "선호하는 솔루션은"완벽하게 적절한 지 나타납니다 귀하의 예제에서

vnLinearIndices = sub2ind(size(A), rowIndices, colIndices); 
bFlag = any(A(vnLinearIndices) & B(vnLinearIndices));