web-dev-qa-db-ja.com

ジュリアの最小の場所

Juliaには、ベクトルの最小値のインデックスを見つけるための組み込みコマンドがありますか?たとえば、Rにはwhich.minコマンド(そしてもちろんwhich.max)があります。

もちろん、自分で次のように書くこともできますが、そうしなくてもいいのですが。

function whichmin( x::Vector )
  i = 1
  min_x=minimum(x)
  while( x[i] > min_x ) 
    i+=1 
  end
  return i
end

これまでに質問されたことがある場合はお詫びしますが、見つかりませんでした。ありがとう!

11
squipbar

0.7-alpha以降、indminindmaxは非推奨になりました。代わりに argmin および argmax を使用してください。

ベクトルの場合、線形インデックスを返すだけです

Julia> x = Rand(1:9, 4)
4-element Array{Int64,1}:
 9
 5
 8
 5

Julia> argmin(x)
2

Julia> argmax(x)
1

インデックスと値の両方を検索する場合は、 findmin および findmax を使用します。

多次元配列の場合、これらの関数はすべてCartesianIndexを返します。

10
ederag

indmax(itr)はあなたが望むことをするだろうと私は信じています。ジュリアから ドキュメント

indmax(itr)→整数

コレクション内の最大要素のインデックスを返します。

そして、これが使用中の例です:

Julia> x = [8, -4, 3.5]
Julia> indmax(x)
1
9
shane

最大値とその位置の両方を返すfindmaxもあります。

9

マルチディム配列の場合、線形インデックスとマルチディムインデックスを切り替える必要があります。

x = Rand(1:9, 2,3)
# 2×3 Array{Int64,2}:
#  5  1  9
#  3  3  8

indmin(x)
# 3 
# => third element in the column-major ordered array (value=1)

ind2sub(size(x),indmin(x))
# (1, 2)
# => (row,col) indexes: what you are looking for.

-モーリス

1
mdiam