0

多くのフィールド (gilt_name) を持つ matlab に構造体 (gilts) があります。構造は Excel からインポートされたワークブックであり、各フィールドはそのワークブックのワークシートに対応しています。各ワークシートは、時系列の日付とそれに対応する雌豚の価格です。When to Convert Dates from Excel Filesの指示に従って、matlab にインポートする前に、Excel の日付を文字列に変換しました。しかし、この変換を matlab で同時に多くのフィールドに適用するにはどうすればよいですか? 各 gilt_name に対応する何百ものデータの配列があり、多くの時間を節約できます。どうもありがとう。

4

2 に答える 2

2

3 つのシートを含む Excel スプレッドシートがあり、それぞれに一連の日付と対応する値が含まれているとします。

エクセル

データを MATLAB にインポートするには、次のコードを検討してください。

%# for each of the three sheets
data = cell(3,1);
for i=1:3
    %# read the sheet as unprocessed data (both text and numeric)
    [~,~,raw] = xlsread('data.xlsx', i);

    %# parse strings as serial dates and combine into a matrix
    data{i} = [datenum(raw(:,1),'dd/mm/yyyy') cell2mat(raw(:,2))];
end

これで、セル配列の各セルにdatai 番目のシートのデータが含まれます。日付はシリアル日付番号として表されます。たとえば、最初の時系列を次のようにプロットできます。

plot(data{1}(:,1), data{1}(:,2))
datetick('x', 'dd', 'keepticks')
xlabel('days'), ylabel('prices')

スクリーンショット

于 2012-08-11T14:39:24.767 に答える
1

フィールド名のリストを作成できます

names = fieldnames(gilts)

あとは、インクリメンタル カウンターによって名前変数にアクセスする for ループを循環するだけです。

例えば、

names = fieldnames(gilts);
for i = 1 : length(gilts),
   n = [gilts(i,1). 'names(i)' (:,:)];
   eval(n); % and do what you need to do
end

このようにして、「names」の文字列を gilts のフィールドとして索引付けできます。

于 2012-08-11T14:39:13.520 に答える