Excelからデータ​を読み込み判別するコ​ードを書きたい

59 views (last 30 days)
実香
実香 on 9 Jan 2024
Edited: Tak on 9 Jan 2024
Excelファイル「input.xlsx」を読み込み、そのデータの各値(Zp1、Zr1、Zp2、Zr2)を使用して条件を満たす列だけ抽出・出力するコードを書きたいです。
とりあえず、自分で書いてみたコードは以下です。
clear
n=3;
%%Excelファイルを読み込みたい
%%1番上の列から順番に以下の条件式に当てはめていく
%%%条件式%%%
P1= rem(Zr1,n)/n;
P2= rem(Zr2,n)/n;
np= n*gcd(Zp1,Zp2);
P11=zeros(np-1,1);
P22=zeros(np-1,1);
for i0=0:(np-1)
P11(i0+1)=(rem(i0*Zp1,np))/np;
P22(i0+1)=(rem(i0*Zp2,np))/np;
end
P_1= P1==P11;
P_2= P2==P22;
A_P1=find(P_1);
A_P2=find(P_2);
if isempty(A_P1)==1 || isempty(A_P2)==1
continue
end
A_P=zeros(length(A_P1),length(A_P2));
for i=1:length(A_P1)
for ii=1:length(A_P2)
A_P(i,ii)=A_P1(i)==A_P2(ii);
end
end
AA_P=find(A_P);
if isempty(AA_P)==1
continue
end
%%条件式を全て満たせば、その列を抽出し出力
初心者で、ぐちゃぐちゃでごめんなさい…
ご助言頂けますと幸いです。

Accepted Answer

Tak
Tak on 9 Jan 2024
Edited: Tak on 9 Jan 2024
データインポート
今回頂いたExcelデータの読み込みについては readtable を使うことで Excelシート内の変数名をテーブル変数名としたtable型としてインポートすることができます。ファイルが現在のフォルダーに無い場合は絶対パスで指定してください。
data = readtable('input.xlsx');
table型の各テーブル変数名へのアクセスは table 内のデータへのアクセス にある通りいくつかの方法がありますが、ドット表記でアクセスできます。
Zp1 = data.Zp1;
Zr1 = data.Zr1;
Zp2 = data.Zp2;
Zr2 = data.Zr2;
その他の方法として、データインポートのコード記述に慣れない内は インポートツール を使う方法もあります。
インポート ツールを使用したスプレッドシート データの読み取り にありますようにデータをインポートするまでの流れをGUI操作で行いつつ、その結果をコードとして自動生成することもできます。
条件を満たす列の抽出・出力
条件式の内容はこちらではわからないのですが。
各行ごとに繰り返し処理をして continue の書かれている isempty(A_P1)==1 || isempty(A_P2)==1isempty(AA_P)==1 の2つの条件が成立した場合を除外して抽出したいという感じでしょうか。
抽出についても列ではなく行ですかね。
clear
n=3;
% Excelファイルを読み込み
data = readtable('input.xlsx');
Zp1 = data.Zp1;
Zr1 = data.Zr1;
Zp2 = data.Zp2;
Zr2 = data.Zr2;
% 条件式を満たしているかの確認
TF = false(height(data),1);
for m=1:height(data)
P1 = rem(Zr1(m),n)/n;
P2 = rem(Zr2(m),n)/n;
np = n*gcd(Zp1(m),Zp2(m));
P11 = zeros(np-1,1);
P22 = zeros(np-1,1);
for i0=0:(np-1)
P11(i0+1) = (rem(i0*Zp1(m),np))/np;
P22(i0+1) = (rem(i0*Zp2(m),np))/np;
end
P_1 = P1==P11;
P_2 = P2==P22;
A_P1 = find(P_1);
A_P2 = find(P_2);
% 条件1
if isempty(A_P1) || isempty(A_P2)
continue
end
A_P = zeros(length(A_P1),length(A_P2));
for i=1:length(A_P1)
for ii=1:length(A_P2)
A_P(i,ii) = A_P1(i)==A_P2(ii);
end
end
AA_P = find(A_P);
% 条件2
if isempty(AA_P)
continue
end
% 条件1,2 不成立の場合に抽出
TF(m) = true;
end
最終的に抽出は以下のように参照します。
% データの抽出
data(TF,:)

More Answers (0)

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!