2013-11-26 2 views
0

숫자의 벡터를 분류하는 함수를 작성하려고합니다.루핑을위한 첨자 할당 차원 불일치

function [a]=classify(x) 
i=length(x); 
for j=1:1:i 
    if(x(j)<0.5) 
     a(j,j,:)='low'; 
    elseif(x(j)==0.5) 
     a(j,1,:)='medium'; 
    else 
     a(j,1,:)='high'; 
    end 
end 

코드를 시도 할 때 첨자 할당 차원 불일치 오류가 발생합니다.

classify([0.5 0.1]) 
Subscripted assignment dimension mismatch. 

Error in classify (line 5) 
a(j,1,:)='low'; 

은 내 매트릭스의 크기로 인한 오류입니까? 다른 솔루션을 살펴본 적이 있지만 그 중 아무 것도 작동하지 않는 것 같습니다. 당신의 입력 벡터의 값 있도록 할당 결국

+0

'(j, j, :) = '낮음'의 두 번째''j '를 가정하면,''오타가 무엇입니까? – chappjc

+0

예, 두 번째 j는 오타입니다. – kenny

답변

2

함수, j = 1 통해 처음 :

a(j,1,:)='medium'; 

당신은 그것을 확인할 수 있습니다

>>size(a) 
ans = 
    1  1  6 

다음 시간을 통해 루프를 사용하려면 j = 2을 입력하고 다음을 할당하십시오.

a(j,j,:)='low'; 

그러나 배열의 3 차원에 따라 길이가 6 (길이가 'medium') 인 새 문자열 할당이 배열을 초기화하는 데 사용되는 값이기 때문에 배열에서 오류가 발생합니다.

배열이이 오류를 나타내는 호환되지 않는 할당으로 간주합니다.

이 문제를 해결하려면 가변 데이터 크기와 짝수 유형을 수용 할 수있는 셀 배열과 같은 것을 사용해야합니다.

그래서 코드 (배열에 대한} {에 (의 변경 사항에 주목))과 같이 표시해야합니다 예를 들어

function [a]=classify(x) 
i=length(x); 
for j=1:1:i 
    if(x(j)<0.5) 
     a{j,j,:}='low'; 
    elseif(x(j)==0.5) 
     a{j,1,:}='medium'; 
    else 
     a{j,1,:}='high'; 
    end 
end 

, 데이터에이 수정 기능을 실행 제공 :

classify([0.5 0.1]) 

ans = 

    'medium'  [] 
      [] 'low' 

응용 프로그램의 나머지 부분에서 올바르게 작동하는지는 모르겠지만 적어도 적절한 데이터 구조를 제공합니다. 당신이 당신의 배열의 3 차원 이유

최종 의견, 이해가 안 왜 그냥 사용하지 않는 :

classify([rand(1,6)])' 

ans = 

    'high' 'low' 'high' 'low' 'low' 'low' 
: 출력 (임의의 입력 벡터를)주는

function [a]=classify(x) 
i=length(x); 
for j=1:1:i 
    if(x(j)<0.5) 
     a{j,:}='low'; 
    elseif(x(j)==0.5) 
     a{j,:}='medium'; 
    else 
     a{j,:}='high'; 
    end 
end 

+0

안녕하세요 roybatty 님, 도움을 주셔서 감사합니다. 나는 (j, :)가 무엇인지, 내가 문제를 보았을 때이 1을 (j, 1, :) 그것을 시도 했으므로 2 차원 버전에 대한 귀하의 제안이 정확히 필요한 것입니다.()와() 사이의 차이점을 설명해 주시겠습니까? – kenny

+0

()을 사용하여 배열 값을 정의하면 표준 배열 유형을 사용한다는 것을 Matlab에 알립니다. 변수에 인덱스하기 위해 {}을 사용하면 Matlab에 셀 배열을 사용하고 있음을 알립니다. 셀 배열은 매우 유연하며 위의 예제에서 볼 수 있듯이 다양한 데이터 유형과 다양한 배열 크기를 수용 할 수 있습니다. 더 많은 토론과 예제를 보려면 Matlab 도움말을 확인하십시오. –

+0

안녕하세요, 설명 = 주셔서 고맙습니다.) 죄송합니다. 지금 바로 간과 했으므로 답변을 수락했습니다. 도와 주셔서 감사합니다! – kenny

관련 문제