我将目录的垂直串联文件变成大约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{:});