'Find'函数工作不正常,已尝试浮点精度分辨率



我将目录的垂直串联文件变成大约60000 x 15的矩阵(已验证)。

d=dir('*.log');
n=length(d);
data=[];
for k=1:n
    data{k}=importdata(d(k).name);
end
total=[];
for k=1:n
    total=[total;data{n}];
end  

i使用以下32介质循环和"查找"函数来定位行号,其中最终列是与循环的整数迭代相对应的整数:

for i=1:32
    v=[];
    vn=[];
    [v,vn]=find(abs(fix(i)-fix(total))<eps);
    g=length(v)
end

我试图通过对" i"的值和矩阵"总数"的值使用"修复"来考虑浮点的准确性,此外还要使用它们的绝对差异并检查其比'EPS(浮点相对精度函数),公差为.99。

"查找"功能无法正常工作。它仅适用于某些整数(尽管它应该定位所有它们(1-32)),对于整数,它确实发现值不完整。

这里有什么问题?如果"查找"是为此目的不足的,那么什么是合适的替代方案?

您得到了很多零,因为您不仅在data的第15列中,而且要查看整个数据矩阵 ,所以您将拥有很多非智能者。

另外,您在两个数字上都使用fix,并且由于浮点错误可能会导致数字略高于在所需的整数下方,这将导致低于下方的数字。em> down 整数比您期望的要低。您应该使用round将其四舍五入到最近的整数。

而不是使用find来执行此操作,我将使用简单的布尔逻辑来确定最后一列的值

for k = 1:32
    % Compare column 15 to the current index
    matches = abs(total(:,end) - k) < eps;
    % Do stuff with these matches
    g = sum(matches);   % Count the matches
end

根据您想对数据进行实际处理的内容,您可以将最后一列用作accumarray的输入来执行每个组的操作。

作为旁注,您可以用

替换代码的第一个块
d = dir('*.log');
data = cellfun(@importdata, {d.name}, 'UniformOutput', false);
total = cat(1, data{:});

最新更新