ジュリアでは、numpyの高度なインデックス作成に似た、多次元配列から複数の要素を含むベクトルを取得する方法がありますか?例えば、この2次元配列から:ジュリアアレイから複数選択
genconv = reshape([6,9,7,1,4,2,3,2,0,9,10,8,7,8,5], 5, 3)
genconv[[1,2,3],[2,3,1]]
これは、3×3アレイではなく、ベクトルをもたらす: screen shot
ジュリアでは、numpyの高度なインデックス作成に似た、多次元配列から複数の要素を含むベクトルを取得する方法がありますか?例えば、この2次元配列から:ジュリアアレイから複数選択
genconv = reshape([6,9,7,1,4,2,3,2,0,9,10,8,7,8,5], 5, 3)
genconv[[1,2,3],[2,3,1]]
これは、3×3アレイではなく、ベクトルをもたらす: screen shot
一方向にsub2ind
関数を使用することであるcol
とrow
インデックスで要素を取得する:
getindex(genconv,sub2ind(size(genconv),[1,2,3],[2,3,1]))
EDIT
は既にuser3580870 @
getindex(genconv,sub2ind(size(genconv),[1,2,3],[2,3,1]))
は、私がgetindex
と配列内包構文間の効率に差を示さない得たものgenconv[sub2ind(size(genconv),[1,2,3],[2,3,1])]
に等しいコメントしています。
a.k.a. 'genconv [sub2ind(size(genconv)、[1,2,3]、[2,3,1])] ' –
クール、作品! Python/Rから来て、これは予期せず複雑に見えます。良いパフォーマンスが必要な場合はこれが良い選択ですか? –
zip([1,2,3]、[2,3,1])] '(i、j)の' [genconv [i、j]これはもう少し直接的なようです。 – jverzani
別のオプションは、ちょうどむしろ多次元配列よりも、ベクトルとしてデータを扱うことです:
genconv = [6,9,7,1,4,2,3,2,0,9,10,8,7,8,5]
genconv[ [10, 13] ]
ジュリア0.5は今CartesianIndex
ESのアレイによって索引付けをサポートしています。
julia> genconv[[CartesianIndex(1,2),CartesianIndex(2,3),CartesianIndex(3,1)]]
3-element Array{Int64,1}:
2
8
7
かなり冗長だと:
julia> genconv = reshape([6,9,7,1,4,2,3,2,0,9,10,8,7,8,5], 5, 3)
5×3 Array{Int64,2}:
6 2 10
9 3 8
7 2 7
1 0 8
4 9 5
julia> genconv[CartesianIndex(2,3)] # == genconv[2,3]
8
面白いのは、あなたがこのnumpyのスタイルの点別のインデックスを指定するCartesianIndex
ESのベクトルを使用することができるということです。CartesianIndex
は、複数の次元にまたがる特殊なインデックス・タイプでありますひどい見た目ですが、これは非常に素晴らしいソリューションのための新しいf.()
特別な放送構文と組み合わせることができます:
julia> genconv[CartesianIndex.([1,2,3],[2,3,1])]
3-element Array{Int64,1}:
2
8
7
いいね? '[genconv [[1,2,3]、[2,3,1]] ...]' –
いいえ、私は3つの要素を持つベクトルが必要です。 –