2013-08-28 3 views
2

.txt 파일에서 5 개의 벡터로 5 개의 벡터를 읽습니다.길이가 다른 벡터의 길이를 최대 크기로 줄임

때로는 일부 벡터가 다른 요소보다 큰 요소이므로 동일한 길이인지 확인해야합니다. 그렇지 않은 경우 가장 큰 요소를 찾아서 마지막 요소를 삭제해야합니다. 나는 루프없이 이것을 할 수 있어야한다고 생각한다. 원래 을 isequal과 함께 사용하려고 생각했지만 isequal은 논리식 만 반환하고 어떤 벡터가 가장 큰지에 대한 정보를 제공하지 않습니다. 초 Sensor1VStatic이

+0

짧은 코드를 제공하십시오 가지고있는 벡터의 예와 그 벡터의 비교 방법에 대해 설명합니다. 그것은 당신에게 당신의 대답을주는 것은 간단 할 것입니다. 이것은 6 개의 요소가있는 셀 배열입니까? 각 요소에는 가변 길이의 벡터가 포함되어 있습니까? – Floris

답변

3

가정 하나 개의 요소에 의해 다른 벡터보다 긴 경우

[Seconds,Sensor1VStatic,Sensor2VPulsed,TemperatureC,RelativeHumidity] = importfile(path); 

그런 다음 벡터가 하나 개의 요소에 의해 더 이상 내용에 따라, 나는 예를

Seconds(end) = []; 
Sensor1VStatic(end) = []; 

위해 수행됩니다 벡터가 셀 배열에있는 경우 A :

A = {[1 2 3], [1 2 3 4], [1 2 3 4 5]}; 

당신은 (위의 예를 들어) 반환

sz = cellfun(@(x)size(x,2), A); 

각 벡터의 크기를 얻을 수 있습니다

이제
sz = [ 3 4 5] 

당신이 가장 짧은 벡터 찾을 수 있습니다 마지막으로

minLength = min(sz); 

과, 모든 벡터를이 길이로 만듭니다.

B = cell2mat(cellfun(@(x)x(1:minLength), A, 'uniformoutput', false))'; 

가 더 우아한 방법이 될 (그리고 cellfun 정말 "암시 루프"하고있는 점에 유의) 당신 (현재 확장) 예를 들어이 적용

을 할 수있다, 당신은 아마 직접 셀 어레이에 importfile의 출력을 할당 할 수 있습니다 - 또는 별도의 줄로 처리 할 수 ​​있습니다.

A = {Seconds,Sensor1VStatic,Sensor2VPulsed,TemperatureC,RelativeHumidity}; 

그러나 모든 것이 많은 작업이됩니다. 대신 당신은 할 수 :

minLength = min(size(Seconds,1), size(Sensor1VStatic,1), size(Sensor2VPulsed,1), ... 

Seconds = Seconds(1:minLength); 
... 

이 일부 영리함에 대한 범위이지만이 일을 더 쉽게 읽을 수 있도록하지 않습니다, 그것은 장기적으로 시간을 절약하지 않습니다 ...

관련 문제