0

元胞数组由 400x1 双元素组成(并且可以扩展到 1,000,000 x 1)。我想用 -1.000 过滤所有条目。过滤浮动值的最佳方法是什么?我应该在单元格数组还是矩阵中进行?或者我应该通过创建一个 for 循环、遍历每个元素并将非 -1.000 条目存储到新数组中来做到这一点?

我使用 textscan 从文件中读取值,然后将其转换为矩阵以绘制 cdf 图。但是,我想从图中消除所有带有 -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

你永远不会在 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 回答
0

你可以简单地做类似的事情

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

-1在将公差设置为您的应用程序的某个可接受值后过滤掉非常接近的值。

于 2012-06-25T04:18:55.757 回答