2014-03-04 2 views
1

실험 데이터의 데이터 세트가 있습니다. 최대 값의 위치를 ​​찾을 수 있지만 최대 값을 찾은 후 을 찾거나 데이터 집합을 잘라내거나 나머지 계열을 0으로 만드는 방법을 찾아야합니다. 다음을 사용할 수는 있지만 할 수는 없습니다. 일.최대 값을 찾은 후 데이터 집합을 자르는 것을 알고 있습니다.

mod_data_1N=1에서 N_max으로 이동하는 새로운 데이터 세트로 만듭니다.

mod_data_1 = data_1; 


N_max = find(data_1(:,2) == max(data_1(:,2))); 
N_max(1); 

for N=1;size (data_1,2); 
if data_1(N,1) > N_max; 
    mod_data_1 (N,:)=0; 
end 
end 
mod_data_1(all(mod_data_1==0,1),:) = [] 
+0

데이터의 크기/크기를 명확히 할 수 있습니까? 또한 두 번째 열의 최대 값을 검색하고 그 다음에 모든 행을 자르고 싶습니까? 아니면 첫 번째 열의 최대 값을 검색하고 싶습니까? 그것은 당신의 코드에서 명확하지 않다. 감사. – chappjc

+0

또한'data_1'의 첫 번째 열에 단순히 행 번호가 포함되어 있습니까? – chappjc

+0

유량 (1)과 압력 (2) 만 있습니다. 최대 흐름을 찾거나 새 데이터 집합을 절약 할 때 – user3380725

답변

1

대신 find(D == max(D)) 접근 max의 제 2 출력 사용 : 아래 정정 코드를 참조 편리한

[~,N_max] = max(data_1(:,2)); 

를이 최대 값의 나타나는 인덱스가 반환

첫 번째 비 - 단점 차원의 값이 둘 이상의 최대 요소를 포함하는 경우 첫 번째 하나는 반환됩니다.

data(N_max+1:end,:) = []; 

또는 대신 0으로 설정하려면 data(N_max+1:end,:) = 0;을 수행 다음


는, 절단합니다.

또는 대신 원래 절단의 사본을 만들 수는 : 코드에 대해서는

mod_data_1 = data(1:N_max,:); 

, 즉 적합하지 않습니다 그래서 열 수 이상 for N=1:size(data_1,2) 루프가 data_1(N,1)에 의해 색인 할 수 있습니다. 행을 반복하려면 size(data_1,1)이 필요합니다. 그러나 반복하지 마십시오. 인덱싱을 사용하여 루프없이이 모든 작업을 수행 할 수 있습니다.

+0

감사합니다 chappjc,이 코드는 괜찮습니다. 코드를 결합하면 내가 원하는 것을 정확히 그릴 수 있습니다. 최고 감사 – user3380725

1

코드에 많은 오류가있는 것 같습니다. 최대 값보다 작은 모든 값을 0으로 설정하려면 if data_1(N,1) > N_maxif data_1(N,1) < N_max이어야합니다. 또한 루프에서 세미콜론을 잘못 사용하고 있습니다.

mod_data_1 = data_1; 
N_max = find(data_1(:,2) == max(data_1(:,2))); 
N_max(1); 

for N=1:size(data_1,2) 
if data_1(N,1) < N_max 
    mod_data_1 (N,:)=0; 
end 
end 
mod_data_1(all(mod_data_1==0,1),:) = [] 
+0

답변 주셔서 감사합니다, 나는 코드를 시도하고 여전히 작동하지 않습니다. – user3380725

관련 문제