2014-10-22 9 views
0

시간 벡터 (T1) 및 해당 데이터 (Data1)를 새로운 시간 벡터 (T2)로 변경하고 해당 데이터 (Data2)에 Nan을 포함하고 싶습니다. 예를 들어 : -시계열 및 해당 데이터 변경

T1      Data1 
01-Sep-2007 00:00:30  0.01 
01-Sep-2007 00:01:30  0.02 
01-Sep-2007 00:02:30  0.03 
01-Sep-2007 00:03:30  0.05 
01-Sep-2007 00:04:29  0.08 
01-Sep-2007 00:07:30  0.09 
01-Sep-2007 00:09:29  0.05 

아래 그림과 같이 나는 내가하고 싶은 새로운 벡터 T2 및 데이터 2에 T1 및 데이터 1을 변경하려면 : -

T2      Data2 
01-Sep-2007 00:00:00  0.01 
01-Sep-2007 00:01:00  0.02 
01-Sep-2007 00:02:00  0.03 
01-Sep-2007 00:03:00  0.05 
01-Sep-2007 00:04:00  0.08 
01-Sep-2007 00:05:00  NaN 
01-Sep-2007 00:06:00  NaN 
01-Sep-2007 00:07:00  0.09 
01-Sep-2007 00:08:00  NaN 
01-Sep-2007 00:09:00  0.05 

누군가가 도움을 줄 수하십시오 내가 이것에 관해서, 나는 그것을 할 수있는 방법을 모른다. MATLAB.Any 도움은 크게 평가 될 것이다 !! 미리 감사드립니다. Shital

+0

는'T1' 어느 데이터 유형입니까? 그것은 벡터가 될 수 없습니다. 그것은 문자열을 포함하는 셀 배열입니까? –

+0

datenum을 사용하여 T1을 Matlab 날짜로 변경합니다. – user3876557

+0

'01-Sep-2007 00 : 07 : 45'이 있었다면 그 데이터 값은'01-Sep-2007 00 : 07 : 00' 또는'01-Sep-2007 00 : 08 : 00'에 할당됩니까? ? 또한 '01-Sep-2007 00 : 07 : 00'과 '01-Sep-2007 00 : 07 : 10'을 가질 수 있으며, 그 경우 어떻게해야할까요? –

답변

2

하는의 당신이 당신의 t1data

>> t1, data1 

t1 = 

01-Sep-2007 00:00:30 
01-Sep-2007 00:01:30 
01-Sep-2007 00:02:30 
01-Sep-2007 00:03:30 
01-Sep-2007 00:04:29 
01-Sep-2007 00:07:30 
01-Sep-2007 00:09:29 


data1 = 

    0.0100 
    0.0200 
    0.0300 
    0.0500 
    0.0800 
    0.0900 
    0.0500 
있다고 가정 해 봅시다 NaN의 전체 유타

먼저 당신은 당신이 당신의 t2 벡터

>> t2 = (min(t1_rounded):dt:max(t1_rounded))'; 

를 생성하고 사용할 수 있습니다 이전 분 현재

>> dt = 1/24/60; 
>> t1_rounded = floor(t1/dt) * dt; 

에 라운드 후 datenum에

>> t1 = datenum(t1); 

t1을 설정하려면 인덱스를 일치시키는 histc 명령의 두 번째 출력 -

>> [~, index] = histc(t1, [t2; Inf]); 

최종 Inft2 벡터의 끝 부분에있는 모든 것을 포착합니다. 마지막으로 NaN으로 가득 찬 새 데이터 벡터를 만들고 할당하면됩니다.

>> data2 = NaN(size(t2)); 
>> data2(index) = data1; 

그래서 당신의 결과는

>> datestr(t2), data2 

ans = 

01-Sep-2007 00:00:00 
01-Sep-2007 00:01:00 
01-Sep-2007 00:02:00 
01-Sep-2007 00:03:00 
01-Sep-2007 00:04:00 
01-Sep-2007 00:05:00 
01-Sep-2007 00:06:00 
01-Sep-2007 00:07:00 
01-Sep-2007 00:08:00 
01-Sep-2007 00:09:00 


data2 = 

    0.0100 
    0.0200 
    0.0300 
    0.0500 
    0.0800 
     NaN 
     NaN 
    0.0900 
     NaN 
    0.0500 
+0

아쉽게도 예상대로 Data2를 얻지 못하고 있습니다. Data2 = [Nan; 0.01; 0.02; NaN; 0.03; 0.05; NaN; 기타]. – user3876557

+0

내 답안과 같은 순서로 모든 단계를 수행 했습니까? –

+0

예. 바닥 명령이 문제를 일으키는 것 같습니다. – user3876557

0

첫 번째 단계는 T1을 가장 가까운 30 초 (아마도 round(T1/dt)*dt과 비슷하지만 데이터에 따라 다름)로 반올림하는 것입니다. 엄격하게 당신이 소수점 산술 오류를 부동 (실제로 가능성이) 가능을 방지하기 위해이 시점에서 다시 T2을 반올림하기를 원할 것입니다 말하기

dt = 1/(2*60*24); 
T2 = min(T1_rounded):dt:max(T1_rounded); 

또는 대부분

T2 = (T1_rounded(1):dt:T1_rounded(end))'; 

을 : 그럼 당신은 이런 T2을 생성 할 수 있습니다

T2 = round(T2/dt)*dt 

지금 Data2를 초기화 앞서 ismember 단계 ... 적절한 크기 B 될

ind = ismember(T2, T1_rounded) 

및 적용 :

Data2 = NaN(size(T2)) 

가 마지막으로 올바른 인덱스를 찾을 수 :

Data2(ind) = Data1 
+0

답장을 보내 주셔서 감사합니다. 문제가 있습니다. 내 Data2의 크기가 Data1과 같지 않아야합니다. 그것은 Data1이 timeesteps 또는 gap이없는 오래된 시간 T1에 해당하기 때문입니다. T2를 사용하여 NaN을 해당 Data2에 추가하려고합니다 ... 그래서 마지막 세 번째 단계는 작동하지 않습니다. – user3876557

+0

@ user3876557 미안합니다. 'T2' – Dan

+0

감사하지만, 내가 말했듯이 Data1 크기는 Data2와 같지 않습니다. 그래서 마지막 단계는 불행하게도 작동하지 않습니다. – user3876557