2015-01-23 3 views
0

각각 크기가 1152 x 241 인 320 개의 매트릭스 세트를 만들려고합니다. 각 매트릭스는 다른 시간 간격을 나타냅니다. 다른 파일에서 임의의 값을 사용하여 각 셀을 채우려고합니다. 이 다른 파일의 크기는 1152 x 241이지만 ~ 2520 시간 간격을 선택할 수 있습니다.랜덤 샘플링/매트랩/매트릭스

그래서 셀을 선택하고 큰 파일의 임의의 시간 단계에서 값을 채우고 인접한 셀로 이동하여 동일한 작업을 수행해야합니다. 320 개의 매트릭스가 만들어 질 때까지 반복하십시오.

문제는 코드를 실행하고 하나의 행렬 만 만듭니다. 320 행렬이 생성되도록 코드를 수정하려면 어떻게해야합니까? 감사!

clear all; 
clc; 

% Load datafile 
load 1979_1999_tropics_subset_3mmhr.mat 

% Create empty maps 
rain_fake_timeseries = zeros(1152,241,320); 

for i = 1:1152; % set longitude 
    %disp(i) 
    for j = 1:241; % set latitude 
     %disp(j) 
     %for k = 1:320; % create map 
      %disp(k) 
      rain_fake_timeseries = datasample(rain_sample_1979_1999,1,3); 
      %disp(rain_fake_timeseries) 
      %save random_clus_fake_timeseries.mat rain_fake_timeseries -v7.3; 
     %end 
    end 
end 

save random_clus_fake_timeseries.mat rain_fake_timeseries -v7.3; 

답변

1

데이터를 저장하기 위해 사용자의 시계열 배열을 올바르게 인덱싱하지 않았기 때문입니다. 당신이하고있는 것은 마지막으로 임의로 선택한 슬라이스를 시계열 배열에 저장하는 것입니다. 루프를 면밀히 살펴보면 for 루프의 반복마다 출력 배열을 덮어 쓰는 것입니다.

또한 for 루프가 올바르게 생성되지 않습니다. 올바르게 이해하면 슬라이스의 각 위치가 고유 한 (x,y) 좌표를 나타냅니다. 보유하고있는 각 매트릭스에 대해이 동일한 위치에서 샘플링하고 ~ 2500 시간 인스턴스를 일시적으로 검색하려고합니다. 따라서 모든 루프 변수 i, jk을 3D 매트릭스에 인덱싱해야합니다. 또한 모든 시간 조각에 (i,j) 위치로 액세스하고 모든 조각에서 임의로 샘플링해야합니다. 작은 최적화 변경을 제안 할 수 있다면 우리는 3 개가 아닌 2 개의 for 루프만으로이 작업을 수행 할 수 있습니다. 모든 시간 조각에 대해이 위치에서 임의로 320 포인트를 선택하여 3D 매트릭스에 저장하십시오. 즉

: 쉽게 행렬의 크기를 변경할 수 있습니다 그것은 아직도 당신이 필요없이 작동합니다 그래서 내가 size 호출로 for 루프에서 차원을 교체 한

clear all; 
clc; 

% Load datafile 
load 1979_1999_tropics_subset_3mmhr.mat 

% Create empty maps 
rain_fake_timeseries = zeros(1152,241,320); 

for i = 1 : size(rain_fake_timeseries,1) 
    for j = 1 : size(rain_fake_timeseries,2) 
     rain_fake_timeseries(i,j,:) = datasample(rain_sample_1979_1999(i,j,:), ... 
             size(rain_fake_timeseries,3), 3); 
    end 
end 

save random_clus_fake_timeseries.mat rain_fake_timeseries -v7.3; 

주 모든 상수를 변경합니다.

+0

감사합니다. 나는 약간 다른 것을하려고 생각하고있다. 나는 원래 ~ 2500 조각에서 320 개의 전체 시간 조각을 무작위로 선택하지는 않습니다. 대신에 320 매트릭스 (1152 x 241 크기)를 만들고 싶지만 인접한 각 셀에는 원본 2500 슬라이스와 다른 시간 조각의 값이 채워져 있습니다. –

+0

다른 말로하면, 각 셀은 설정된 지리적 영역을 나타내므로 한 셀의 값으로 한 셀을 채우고 다음 영역으로 이동하여 다른 시간의 값으로 채우는 것입니다. 저는 1152 x 241 행렬 중 320 개 모두에 대해 이렇게하고 싶습니다. –

+0

답안을 편집하기 전에 수정 된 문제 문을 이해하는 데 어려움이 있기 때문에 질문 할 질문이 있습니다. (1)이 변수 'rain_sample_1979_1999'는 무엇을 나타 냅니까? 행, 열 및 조각은 무엇을 나타 냅니까? (2)이 3D 배열에서 "지리적 영역"이 무엇인지 어떻게 결정합니까? (3)이 3D 배열에서 "시간"을 어떻게 계량합니까? 이것은 원래의 질문에서 명확하게 밝혀지지 않았습니다. – rayryeng