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

35 次查看(过去 30 天)
実香
実香 2024-1-9
编辑: Tak 2024-1-9
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
%%条件式を全て満たせば、その列を抽出し出力
初心者で、ぐちゃぐちゃでごめんなさい…
ご助言頂けますと幸いです。

采纳的回答

Tak
Tak 2024-1-9
编辑:Tak 2024-1-9
データインポート
今回頂いた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,:)

更多回答(0 个)

标签

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!