我将目录中的文件垂直连接成一个大小约为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
我正在使用以下32次迭代循环和“Find”函数来定位行号,其中最后一列是对应于循环的整数迭代的整数:
for i=1:32
v=[];
vn=[];
[v,vn]=find(abs(fix(i)-fix(total))<eps);
g=length(v)
end
我试图通过对'i'的值使用'fix'和使用矩阵'total'的值来解释浮点精度,此外还要考虑它们的绝对差值并检查它是否小于' eps'(浮点相对精度函数),最大公差为.99。
“查找”功能无法正常工作。它仅适用于某些整数(尽管它应该定位所有整数(1-32)),对于整数,它确实发现值不完整。
这是什么问题?如果“查找”不足以达到此目的,那么什么是合适的替代方案?
答案 0 :(得分:2)
你得到了很多零,因为你不只是在data
的第15列,而是整个数据矩阵,所以你将会有很多非整数
此外,您在这两个数字上使用fix
,因为浮点错误可能导致数字略高于且低于所需的整数,这将导致低于圆形向下低于您期望的整数。您应该使用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{:});