フィルターのクリア

CSVから取り込んだ​データのisequa​lを用いた等価性の確​認

4 ビュー (過去 30 日間)
O.E
O.E 2018 年 2 月 13 日
コメント済み: O.E 2018 年 2 月 13 日
2つのCSVファイルが等しいものかどうかを確認するためのプログラムを作成し、どの部分が異なるのかを確認しようと考えています。
そこでisequalを用いて等価性を判別した後に、IF文を用いて該当箇所を検索するコードを作成しました。
実行したところisequalがFalseになったため、IF文を用いて差分を検索しましたが、見つかりませんでした。
コードは以下の通りです。(添付の二つのCSVファイルの差分を検出しようとしています。)
clear
Ts=1;
filename = 'sys_out.csv';
listing = dir(filename);
value = getfield(listing, 'bytes');
switch value
case 0
sprintf('sys_outなし');
otherwise
IN=csvread(filename);
end
filename = 'test.csv';
listing = dir(filename);
value = getfield(listing, 'bytes');
switch value
case 0
sprintf('testなし');
otherwise
IDEAL=csvread(filename);
end
tf = isequal(IN,IDEAL)
switch tf
case 0
n = size(IN);
Table = zeros(n(1,1),2);
for a = n(1,1)
if IN(n(1,1),1) == IDEAL(n(1,1),1)
Table(n(1,1),1) = 0;
else
Table(n(1,1),1) = 1;
end
if IN(n(1,1),2) == IDEAL(n(1,1),2)
Table(n(1,1),2) = 0;
else
Table(n(1,1),2) = 1;
end
end
case 1
end
k = find(Table)

採用された回答

michio
michio 2018 年 2 月 13 日
f = isequal(IN,IDEAL)
以降の for ループがループになっていない模様です。ただ、異なる点を見つけるなら
diff = IN - IDEAL;
[row,col,v] = find(diff)
でもOKかと思います。ある程度の誤差を許す場合は例えば
error = 1e-10;
diff = abs(IN - IDEAL) > error;
[row,col,v] = find(diff);
とかいかがでしょうか。
  1 件のコメント
O.E
O.E 2018 年 2 月 13 日
ありがとうございます。
解決いたしました。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeプログラミング についてさらに検索

Community Treasure Hunt

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

Start Hunting!