2017-05-12 1 views
3

한다고 가정 우리가 다음과 같이 정의 배열 :줄리아 : 배열의 열 함께 최대를 찾을 수

a=[1 2; 3 4; 5 5; 7 9; 1 2]; 

matlab에, 우리는 서면에 의해 최대 값을 찾을 수 : 줄리아에서

[x y] = max(a) 
    x = 
    7  9 

, 우리는 사용할 수 있습니다

a=[1 2; 3 4; 5 5; 7 9; 1 2] 
    findmax(a,1) 

가 반환 :

([7 9], 

    [4 9]) 

그러나 두 개의 열에 대해서만 [7 9]를 찾는 것뿐만 아니라 [4, 4]와 같이 각 열 내에서의 상대적인 위치에 관심이 있습니다. 물론 코딩 라인을 좀 더 작성할 수는 있지만 findmax로 직접 할 수 있습니까?

답변

6

findmax에 의해 반환 된 두 번째 행렬은 linear 전체 배열에 대한 최대 값의 색인입니다. 각 열의 위치를 ​​원한다. 이를 얻으려면 선형 인덱스를 ind2sub으로 아래 첨자로 변환 할 수 있습니다. 그런 다음 첨자 튜플의 첫 번째 요소는 행 인덱스입니다.

julia> vals, inds = findmax(a, 1) 
(
[7 9], 

[4 9]) 

julia> map(x->ind2sub(a, x), inds) 
1×2 Array{Tuple{Int64,Int64},2}: 
(4,1) (4,2) 

julia> map(x->ind2sub(a, x)[1], inds) 
1×2 Array{Int64,2}: 
4 4