2015-01-31 1 views
1

저는이 시점에서 연습/학습을 위해 관계 연산자를 사용하는 대신 배열/행렬을 반복하고 싶습니다. 간단한 조건이 충족되면 각 요소를 true 또는 false 값으로 대체하고 논리적 클래스의 결과 배열로 끝납니다. 내 들어Matlab : 각 요소를 참/거짓 값 (논리 배열)으로 바꿉니다

vec = [5 9 3 4 6 11]; 

[r,c] = size(vec); 

vecempty = zeros(r,c); 

for i = 1:r; 
    for j = 1:c 
     if vec(i,j) > 5; 
      vecempty(i,j) = true; 
     else 
      vecempty(i,j) = false; 
     end 
    end 
end 

fprintf('Your truth matrix: \n\n\n') 

disp(vecempty) 

total = 0; 

for i = 1:r; 
    for j = 1:c; 
     total = total + vecempty(i,j); 
    end 
end 

fprintf('Total number of truth elements: %d \n\n\n', total) 

"VEC (I, J)는"조건은, 내가 처음에 그들을 "= 1"또는 "= 0"했다,하지만 난이 단지 숫자 자체를 제공하고 참 또는 거짓되지 않은 추측. 따라서 "= true"또는 "= false"로 갔지만 궁금한데 왜 내가 반환 한 배열 (vecempty)이 논리적 클래스로 표시되지 않습니까?

다음과 같은 값 :

Vectruth = vec > 5 

결과 "Vectruth는"논리적 클래스로 반환됩니다. 내 루프에서 "true"또는 "false"를 반환하는 경우 혼란 스럽습니다. 결과 벡터가 "vec> 5"로 논리 클래스로 표시 될 때 논리 클래스로 표시되지 않는 이유는 무엇입니까? 고맙습니다. 필요한 경우

답변

1

당신은 대신 물론

vecempty = zeros(r,c); 

vecempty = false(r,c); 

를 호출하여 논리적 배열을 초기화 할 수 있습니다, falsetrue 교체 할 수 있습니다.

+0

정말 고맙습니다. 저의 "vecempty"는 논리적 인 수업이됩니다. 그러나 내가 무엇을했는지, 나의 "vecempty"가 논리적 인 계급으로 인식되지 않는 이유에 대한 이유가 있습니까? – pdhami

+0

배열이 숫자로 초기화되고 해당 요소 중 하나에 논리 값을 할당하려고하면 Matlab에서 해당 값을 0 또는 1로 변환하여 배열의 수치를 남깁니다. 어떤 이유로 논리 배열을 원한다는 것을 처음에 알지 못했다면 나중에 논리 배열 (vecempty)로 변환 할 수 있습니다. 하지만 지금은 그러한 상황이 언제 나타날지 알지 못합니다. 어쩌면 분명히 할 수 있을까요? – FliegenderZirkus

+0

FliegenderZirkus가 말한 것을 일반화하면, 할당 된 값을 괄호로 초기화하면 MATLAB은 할당의 오른쪽에있는 값을 왼쪽 값의 클래스로 강제 변환합니다. 따라서 true와 false가 vecempty가 초기화 된 형식 인 double로 강제 변환됩니다. – SCFrench

관련 문제