2016-12-04 4 views
0

파일을 내 디렉토리에서 크기가 약 60000 x 15 (확인 됨) 인 행렬로 수직 연결했습니다.'찾기'기능이 제대로 작동하지 않습니다. 부동 소수점 정확도를 시도했습니다.

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

:

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 반복 루프를 사용하고 찾는 오전 나는 'i'의 값과 행렬 'total'의 값에 'fix'를 사용하여 부동 소수점 정확도를 계산하려고 시도했다. 절대 차이를 가져 와서 'eps'의 허용치보다 작게 확인했다. 부동 소수점 상대 정확도 기능), .99 허용 오차까지.

'찾기'기능이 올바르게 작동하지 않습니다. 특정 정수에서만 작동하지만 (모두 (1-32)를 찾아야 함) 정수 값의 경우 값이 불완전하다는 것을 알 수 있습니다.

무엇이 문제입니까? 이러한 목적으로 '찾기'가 부적절한 경우 적합한 대안은 무엇입니까?

+3

내가 여기 사지에 나가서 find'가 잘 작동하고'말할거야와 코드의 첫 번째 덩어리를 대체 할 수 있습니다 당신은 그것을 어떻게 오해 공장. 그것은 분명히 있지 않기 때문에 당신이 실제로하려고하는 것을 후원하고 우리에게 말하는 것이 가치가 있습니다. – Suever

+0

행렬의 열 15는 1-32 사이의 정수 값을 갖는 유일한 열이므로 find 함수는 해당 특정 정수에 해당하는 행 번호가있는 벡터 'v'를 반환해야합니다 (vn은 부적합). 출력 결과는 v가 0이 아니어야하는 많은 정수에서 v의 길이가 0임을 보여줍니다. 벡터 'v'를 사용하여 행 번호를 찾으십시오.이 행 번호에서 'total'행렬의 다른 열에서 해당 데이터를 가져올 수 있습니다. 그거 분명해? – romanex

+0

'total (:)'은'total'이 60000 x 15이므로 쓸 수도 있습니다. 또한 [cell2mat] (https://www.mathworks.com/help/matlab/ref/cell2mat.html)을 사용할 수 있습니다. 첫 번째 코드에서. –

답변

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{:}); 
+0

첫 번째 코드 블록에 게시 한 솔루션이 정수에 대해 작동하지 않습니다 : 2,3,5,6,7,8,9,101213161720,23,25,26,29, 30,31 – romanex

+0

루프의 부동 소수점 친화적 인 버전뿐만 아니라 연결 버전을 사용했습니다. 매우 감사 – romanex