0

2 つの列を含む .txt ファイルがあります。1 つ目は日付を保持し、2 つ目はその日付の降水量 (ppt) の浮動小数点値を保持します。降水列を読み、各嵐の降水量を合計したいと思います。嵐は、降水量がゼロの期間で区切られます。したがって、私は基本的に、Matlab に ppt 列を読み取り、0 を読み取るまで値を合計し、合計をベクトルのセルに入れ、読み取りと繰り返しを続けるように指示したいと考えています。条件ステートメントを含むループが必要であることはわかっています。Matlab に関する私の限られた知識に基づいて、成功するコードは次のようになると思います。

fid = fopen(12hr_ppt.txt');
C = textscan(fid);
l = length(fid);
? = 0;
for i=1:l;
    if fid(i)>0;
        ?=fid(i)+?;
    else
        ?=0;
    endif
    fprintf(?);
end

だから私は基本的に欲しいですか?合計降水量を保持するベクトルになります。イベントに対応する日付もあると本当にいいのですが、今のところ、この問題に取り組みたいだけです. どんな助けでも大歓迎です!

4

1 に答える 1

0

次の行に沿って何かを使用できます。

clear;
close;
clc;

date_ppt = importdata('testcase.txt');
num_rows = size(date_ppt.data,1);
end_storm = find(date_ppt.data == 0);
if(end_storm(1) == 1)
    end_storm = end_storm(2:end);
end
if(end_storm(end) ~= num_rows)
    end_storm = [end_storm;num_rows];
end
begin_storm = [1;(end_storm(1:(end-1)) + 1)];

accumulated_ppt = zeros(size(begin_storm));

for i = 1:numel(accumulated_ppt)
    accumulated_ppt(i) = sum(date_ppt.data(begin_storm(i):end_storm(i)));
end

accumulated_ppt

ここで、私の「testcase.txt」には次のものが含まれています。

Date    PPT
01/01/13    0.276
02/01/13    0.6797
03/01/13    0.6551
04/01/13    0.1626
05/01/13    0
06/01/13    0.4984
07/01/13    0.9597
08/01/13    0.3404
09/01/13    0.5853
10/01/13    0.2238
11/01/13    0.7513
12/01/13    0.2551
13/01/13    0.506
14/01/13    0.6991
15/01/13    0.8909
16/01/13    0.9593
17/01/13    0.5472
18/01/13    0
19/01/13    0.1493
20/01/13    0.2575
21/01/13    0.8407
22/01/13    0.2543
23/01/13    0.8143
24/01/13    0.2435
25/01/13    0.9293
26/01/13    0.35
27/01/13    0.1966
28/01/13    0.2511
29/01/13    0.616
30/01/13    0.4733
31/01/13    0.3517
01/02/13    0.8308
02/02/13    0.5853
03/02/13    0.5497
04/02/13    0.9172
05/02/13    0.2858
06/02/13    0.7572
07/02/13    0.7537
08/02/13    0.3804
09/02/13    0.5678
10/02/13    0.0759
11/02/13    0
12/02/13    0.5308
13/02/13    0.7792
14/02/13    0.934
15/02/13    0.1299
16/02/13    0.5688
17/02/13    0.4694
18/02/13    0.0119
19/02/13    0.3371

得られた出力は次のとおりです。

accumulated_ppt =

    1.7734
    7.2165
   11.4314
    3.7611

さらに、「日付」列の値は に格納されdate_ppt.textdata(:,1)ます。たとえば、 に対応する日付だけが必要end_stormな場合は、単に `date_ppt.textdata(end_storm,1)' を使用できます。

>> date_ppt.textdata(end_storm,1)

ans = 

    '04/01/13'
    '17/01/13'
    '10/02/13'
    '18/02/13'
于 2013-05-02T06:05:27.140 に答える