2014-09-10 2 views
0

행렬의 숫자가 아닌 값을 일부 숫자로 바꾸는 코드를 작성했습니다. 이제 테스트하려면 MATLAB이 숫자가 아닌 항목을 허용하도록하고 싶습니다.MATLAB의 행렬에 숫자가 아닌 항목을 허용합니다.

내 코드 프롬프트를 시작합니다; 언밸런스 또는 예기치 않은 괄호 또는 브래킷 나는 같은 것을 입력하면 matrix_input = input('Please enter the matrix: x=');

는 [1,2,3 4,5,?, MATLAB에 오류가 있습니다. 모든 대괄호가 균형을 이루고있는 것처럼 보이기 때문에 이것은 숫자가 아닌 항목 때문에 발생한다고 생각합니다. MATLAB이 숫자가 아닌 항목을 허용하도록 할 수 있습니까?

+1

숫자가 아닌 항목을 대체하려면 'NaN'을 사용하십시오. – Divakar

+0

@Divakar, 이미 대체 코드를 작성했습니다. 내 문제는 숫자가 아닌 항목이있는 행렬에서 테스트 할 수 없다는 것입니다. 나는 또한 어떤 캐릭터가 나의 코드 퍼포먼스를 테스트하는데 사용될 것인지는 모른다. 아마도 '?' 또는 다른 것일 수도 있습니다 – user3349993

+0

행렬 대신 셀을 사용하십시오. 셀에 무엇이든 넣을 수 있습니다. ''c = {1, 2, 3; 4, 5, '?'}''. 거기에서 대체물을 만들고''m = cell2mat (c)''와 함께 행렬을 얻을 수 있습니다. – Nras

답변

4

cell array이 필요합니다. 셀 배열의 각 셀은 모든 유형의 데이터를 보유 할 수 있습니다. 중괄호는이 같은 셀 어레이를 만드는 데 사용됩니다 :

cell_array = {1, 2, 3; '4', '?', 6}; 

당신이 셀 배열의 요소에 액세스 할 일반 괄호를 사용하는 경우

당신이 세포를 얻을. 중괄호를 사용하면 셀의 내용을 가져옵니다. 셀 어레이를 사용하여 사람들을 잡으려는 경향이있는이 차이점이 있습니다.

cell_array(1) % Returns a 1x1 cell containing the value 1. 
cell_array{1} % Returns 1 

편집 호기심에서

, 당신은 숫자가 아닌 값을 대체하기 위해 사용하고있는 코드?

코멘트에서 언급 한 바와 같이
idx = cellfun(@isnumeric, cell_array); 
cell_array(~idx) = {NaN}; 
matrix = cell2mat(cell_array); 

, 당신은 또한 구조체의 배열을 사용할 수 있습니다 : 셀 어레이의 I는 다음과 재치 와서 이것은 구조의 배열을 만들 것

struct_array = struct('v', {1, 2, 3; '4', '?', 6}); 

을 어디 필드 v 값을 포함합니다. 그러나, 나는 분을 대체 할 수있는 깔끔한 방법을 생각할 수 없다.

+0

가능한 해결 방법으로 구조체 배열을 추가 할 수 있습니다. 구조체는 일반적으로 셀보다 성능이 좋습니다. – sobek

+0

@sobek 확실합니까? – excaza

+0

구조체 배열에 대해서는 잘 모르겠지만 셀에는 공통적 인 구조체와 성능상의 단점이 분명합니다. – sobek

관련 문제