Excelからデータを読み込み判別するコードを書きたい
59 views (last 30 days)
Show older comments
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
%%条件式を全て満たせば、その列を抽出し出力
初心者で、ぐちゃぐちゃでごめんなさい…
ご助言頂けますと幸いです。
0 Comments
Accepted Answer
Tak
on 9 Jan 2024
Edited: Tak
on 9 Jan 2024
データインポート
今回頂いたExcelデータの読み込みについては readtable を使うことで Excelシート内の変数名をテーブル変数名としたtable型としてインポートすることができます。ファイルが現在のフォルダーに無い場合は絶対パスで指定してください。
data = readtable('input.xlsx');
Zp1 = data.Zp1;
Zr1 = data.Zr1;
Zp2 = data.Zp2;
Zr2 = data.Zr2;
インポート ツールを使用したスプレッドシート データの読み取り にありますようにデータをインポートするまでの流れをGUI操作で行いつつ、その結果をコードとして自動生成することもできます。
条件を満たす列の抽出・出力
条件式の内容はこちらではわからないのですが。
各行ごとに繰り返し処理をして continue の書かれている isempty(A_P1)==1 || isempty(A_P2)==1 と isempty(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,:)
0 Comments
More Answers (0)
See Also
Categories
Find more on スプレッドシート in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!