0

セル配列は、ダブルの400x1要素で構成されます(1,000,000 x 1まで拡張できます)。すべてのエントリを-1.000でフィルタリングしたいと思います。浮動値をフィルタリングするための最良の方法は何ですか?セル配列またはマトリックスでそれを行う必要がありますか?または、forループを作成し、各要素を実行して、-1.000以外のエントリを新しい配列に格納するだけでそれを行う必要がありますか?

textscanを使用してファイルから値を読み取り、後で累積分布関数グラフをプロットするためにそれを行列に変換します。ただし、グラフから-1のすべてのエントリを削除したいと思います。


fid = fopen('t1_error.txt','r');
C = textscan(fid, '%.3f');            
fclose(fid);

A = cell2mat(C);
[ycdf,xcdf] = cdfcalc(A);
ycdf = ycdf(2:length(ycdf));
plot(xcdf, ycdf, 'LineWidth', 2);
4

3 に答える 3

1

@Ansariは正しい考えを持っていますが、-1は無効な値のフラグであり、浮動小数点で正確に表されるため、許容値を確認する必要はないと確信しています。トレランストリックが解決することを意図している奇妙な丸めの問題を取得します。

Z = (A == -1);   % Z(i) = 1 if A(i) == -1,
                 %        0 otherwise

A1 = A(~Z);      % Subset of A excluding all -1 values.
于 2012-06-25T05:57:48.740 に答える
0

あなたは単に次のようなことをすることができます

tolerance = 1e-6;
A(A+1 < tolerance) = [];

-1アプリケーションの許容値に許容値を設定した後、非常に近い値を除外します。

于 2012-06-25T04:18:55.757 に答える
0

他のすべての可能性を試した場合を除いて、Matlabでforループを作成することは絶対にしないでください;)これは行列指向プログラミングであることを忘れないでください。

-1を除外する場合は、次のようにします。

A = magic(6);
A(1,3) = -1.23;
A(2:4,3:5) = -1.00;
% the -1.23 value is preserved by the following line
A(A==-1.0000) = 0;

または、それらの-1がどこにあるかを知りたい場合:

A = magic(6);
A(2:4,3:5) = -1;
minus_one_loc = find(A == -1);
A(minus_one_loc) = 0;

だから、私があなたが何を望んでいたかをよく理解していれば、これが答えです。

乾杯

于 2012-06-25T04:35:01.587 に答える