行列データの線形補間と変数の作成について

添付したような42行×3列のデータがあります。day=3とday=16をx値に、それに対応するprofitの数値をy値として各companyごとに線形補間をした数値をday=4~15に入れたいのですが、どのようなコードを書けばよいでしょうか。ループの部分はコードができているので、線形補間とそれを今欠損しているデータのところに線形補間されるように入力されるコードを教えて頂きたいです。

 Réponse acceptée

Hernia Baby
Hernia Baby le 28 Juin 2021
Modifié(e) : Hernia Baby le 29 Juin 2021

1 vote

fillmissingなどはどうですか? 以下にサンプルコード書きます。 スマホなので変になってたら帰って訂正いたします。
if true
a(:,1)=3:16;
a(:,2)=nan(14,1);
a(1,2)=100;
a(end,2)=400;
a(:,2)=fillmissing(a(:,2),'linear','SamplePoints',a(:,1))
end

6 commentaires

E E
E E le 29 Juin 2021
ありがとうございます。このコードを回してもインポートしたエクセルシートに値が代入されないのですが、何か前提となっているコードはありますか、、?お手数をおかけして申し訳ございません。
Atsushi Ueno
Atsushi Ueno le 29 Juin 2021
a = readmatrix('linear interpolation.xlsx');
a(:,1)=fillmissing(a(:,1),'linear','SamplePoints',a(:,2)); %列をひっくり返しました
writematrix(a,'linear interpolation.xlsx','Sheet',1,'Range','A1:B14');
writematrixを後に追記すればエクセルファイルに書き出されますよ
E E
E E le 29 Juin 2021
このコード自体では出来ているのですが、tableとして読み込んだものに対しては上手く挿入がされないです。。
Atsushi Ueno
Atsushi Ueno le 29 Juin 2021
回答者はエスパーじゃないので、@E E様がどのような環境で動かそうとしているかは判りませんよ
上記質問の環境に合わせると同様に処理できます。table 内のデータへのアクセス方法に要注意です。
a = readtable('linear interpolation.csv');
a{:,1} = fillmissing(a{:,1},'linear','SamplePoints',a{:,2}); %列をひっくり返しました
writetable(a,'linear interpolation.csv');
E E
E E le 29 Juin 2021
お手数をおかけして大変申し訳ございません。無事にできました。以後は必ず環境等も明記して質問させて頂くようにします。本当にありがとうございました。
Hernia Baby
Hernia Baby le 29 Juin 2021
お二人ともコメントありがとうございます。 versionが古いものですと [num,~,~] = xlsread(_); が有効です。 本件、自分が頂いたサンプルデータから加工せずに行ったため、混乱させてしまいました。申し訳ございません。 しかし、データの読込みだけでも新しい知見が自分自身得られたなと思います。 お二人ともありがとうございました。 今後とも気軽にご質問よろしくお願いします。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!