2015-01-31 6 views
3

배열이 x 인 경우를 가정 해 봅시다. 내가 두 배열이있는 경우MATLAB에서 최대 배열을 찾는 방법은 무엇입니까?

maximum = max(x); 

, 내가 명령

maximum_array = max(x, y); 
를 사용하여 최대 값을 포함하는 배열을 찾을 수 있습니다,의는 x와 y 가정 해 봅시다 : 다음과 같이 우리는이 배열의 최대 값을 찾을 수 있습니다

이 배열이 y라고 가정 해 봅시다. 그리고, I는 X가 이전과 같이, 인자 (Y)과 최대 명령을 사용하여 최대 값을 찾을 수

이러한 2 단계 절차는 다음의 컴팩트 한 줄 명령으로 수행 될 수
maximum_value = max(y); 

:

maximum_value = max(max(x, y)); 

하지만 배열이 2 개 이상일 때 어떻게됩니까? 필자가 아는 한, max 함수는 두 개 이상의 배열을 비교하는 것을 허용하지 않습니다. 따라서 배열 쌍에 대해 max를 사용하고 중간 결과 중 최대 값을 찾아야합니다 (추가 변수 사용 포함). 물론, 만약 내가 가지고 있다면, 50 개의 배열을 가정 해 봅시다. 이것은 아마도 tedius 프로세스 일 것입니다.

보다 효율적인 방법이 있습니까?

답변

3

접근 # 1

연결할 column 벡터 버전은 최대를 얻을 수 dim-2 함께 max와 maximium 값을 사용합니다. 당신은 ndims을 찾는 데 사용할 수있는 2

%// Reshape all arrays to column vectors with (:) and then use cat 
M = cat(2,x(:),y(:),z(:)) 

%// Use max along dim-2 with `max(..,[],2)` to get column vector 
%// version and then reshape back to the shape of input arrays 
max_array = reshape(max(M,[],2),size(x)) 

접근 # -, 입력 배열이 될 이런 식으로 뭔가를 할 x, yz 가정

따라서

, 입력 배열의 차원 수를인 차원을 따라 연결합니다. 해당 치수의을 찾아 최대 값 배열을 얻으려면 함께 max을 찾으십시오.이것은 모든 것을 앞뒤로 재구성하지 않으므로 더 효율적이고 더 간단한 코드 일 수 있습니다. -

ndimsp1 = ndims(x)+1       %// no. of dimensions plus 1 
maxarr = max(cat(ndimsp1,x,y,z),[],ndimsp1) %// concatenate and find max 
+0

고마워요! 배열의 "컬럼 화"(:-))는 처음부터 완벽하게 이해할 수 있습니다. 나는 그 생각을해야만합니다 ... – Kotsos

+1

@Kotsos 스마일리가 아닌 것을 제외하고! – Divakar

+0

그래, 나에게 재미있는 말처럼 보일 뿐이다. 심지어 그것이 유효한 영어인지 아닌지 나는 모른다. – Kotsos

1

나가 어레이의 작은 세트에 대한 쉬운 접근이 열 쓸어라고 생각하고 연결할 :

maxValue = max([x(:);y(:)]); 

일부 데이터 구조 배열의 다수의 경우 (예, 세포 배열 또는 구조체) 나는 간단한 루프는 가장 좋은 것입니다 :

이름을 다른 별도 배열의 많은 수의 병적 인 경우를 들어
maxValue = max(cellOfMats{1}(:)); 
for k = 2:length(cellOfMats) 
    maxValue = max([maxValue;cellOfMats{k}(:)]); 
end 

, 내가 "하지 않는다"라고 말하며 데이터 구조에 넣어 또는으로 eval를 사용 고리. 다음 cat과와 dim-2 함께 그들의

관련 문제