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

添付したような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

En savoir plus sur Resizing and Reshaping Matrices dans Centre d'aide et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!