MATLAB Answers

myu
0

複数のExcelファ​イルを多次元配列とし​てインポートするやり​方

Asked by myu
on 1 Oct 2019
Latest activity Commented on by myu
on 14 Oct 2019
こんにちは。
データのインポートについてお伺いいたします。
同一実験の試技のデータが複数のExcelファイル(1試技に対し1つ)となっています。それを多次元配列としてでデータ入力したいと考えています。ファイルの選択には以下の方法を用いる予定です。その後どのようにコードを書けば、多次元配列として処理できるか教えてください。宜しくお願い致します。
[rdf_name,prd]=uigetfile( '*.*','ファイルの指定','multiselect','off');
cd(prd);
if iscell(rdf_name)==0; rdf_name={rdf_name};end
faa=size(rdf_name);
fnumend=faa(2);
disp(rdf_name);

  3 Comments

Yoshio
on 3 Oct 2019
やりたいことをもう少し具体的に記載して頂けますか?
たとえば、ExcelファイルはCSVなのか、データはベクトルなのか行列なのか、サイズはわかっているのか、多次元配列は何次元なのか等です。
ダミーのデータも添付してもらえると、他の方からの回答が得られやすいと思います。
myu
on 8 Oct 2019
コメントありがとうございます。
ファイルはcsvです。データは行列で添付した'sample1_1.csv'のようになっているファイルを
sample1_1.csv~sample1_10.csv
までの計10個のファイルを一括でインポートしたいと思っています。
その後は各列についての平均や分散などを計算する予定です。
イメージとしては以下のように格納したいと思っていますが、その後の計算が出来れば別のやり方でも構いません。よろしくお願いいたします。
Yoshio
on 11 Oct 2019
サンプルファイルのご提供ありがとうございました。
これはコメントですが、このようなプログラムの作成では、動作検証しやすいダミーデータの作成もコツの一つです。
例えば、実際のデータよりも少なくして、人工的な値(整数、10の倍数とか)で今の場合だと、一つのファイルは整数、もう一つは10の倍数等を書き込んで置くとデータが正しく読み込まれたか確認がしやすいです。

Sign in to comment.

1 Answer

Yoshio
Answer by Yoshio
on 11 Oct 2019
Edited by Yoshio
on 14 Oct 2019
 Accepted Answer

頂いたファイル仕様に基づいて、以下作成してみました。
一部記載いただいたコードを変更しています。一応データの範囲を指定できるようしてありますが、全てのcsvファイルで範囲が共通であることが前提です。
clear
[rdf_name,prd]=uigetfile( '*.csv','ファイルの指定','multiselect','on');
cd(prd);
if iscell(rdf_name)==0; rdf_name={rdf_name};end
% faa=size(rdf_name);
% fnumend=faa(2);
fnumend = size(rdf_name,2);
disp(rdf_name);
m = 79; n = 14;
data = zeros(m,n,fnumend);
for i = 1:fnumend
data(:,:,i) = read_data(rdf_name{i},m,n);
end
function data_matrix = read_data(fname,m,n)
data_matrix = readmatrix(fname,'Range',[2,2,m+1,n+1]);
end

  3 Comments

myu
on 14 Oct 2019
ありがとうございます。試してみたのですが、
関数または変数 'read_data' が未定義です。
と出てきてしまいます。
どうしたらよいのでしょうか。
Yoshio
on 14 Oct 2019
上記コード(ファイルを一つ指定した場合も動作するように修正済み)を、適当な名前をつけて、保存してから実行してください。スクリプトファイルの中に関数read_dataを定義しているので、mファイルとして実行します。コードを選択して実行だけでは動きません。
myu
on 14 Oct 2019
出来ました!ありがとうございます。大変助かりました。

Sign in to comment.