Juliaでvec
は、多次元配列を1次元配列に再構成します。 しかし、配列の配列やタプルの配列に対しては機能しません。 配列の理解を使用している部分は、配列/タプルの配列を平坦化する別の方法がありますか?または、配列/タプルの配列/タプルの配列?あなたはRecursiveArrayTools.jlからVectorOfArray
を使用している場合か...Julia:配列/タプルの配列を平滑化
答えて
Iterators.flatten(x)
は、x
の各要素を反復するジェネレータを作成します。それは安定したタイプの音ではありませんので、あなたが配列やタプルの配列の配列を持っている場合、それはあなたが記述例いくつか、例えば
julia> collect(Iterators.flatten([(1,2,3),[4,5],6]))
6-element Array{Any,1}:
1
2
3
4
5
6
を扱うことができ、あなたはおそらく、あなたのデータ構造を再検討すべきです。しかし、あなたは私の例のすべてがArray{Any,1}
を返す方法例えば、flatten
に
julia> collect(Iterators.flatten([(1,2,[3,3,3,3]),[4,5],6]))
6-element Array{Any,1}:
1
2
[3, 3, 3, 3]
4
5
6
julia> collect(Iterators.flatten(Iterators.flatten([(1,2,[3,3,3,3]),[4,5],6])))
9-element Array{Any,1}:
1
2
3
3
3
3
4
5
6
注意を複数の呼び出しを使用することができます。これは、コンパイラが出力配列の要素に対して単一の具体的な型を決定できなかったことを意味するため、パフォーマンスの悪い兆候です。これらの例を選んだのは、不安定なコンテナを既に入力しているように聞こえるように聞こえるからです。配列の配列を平坦化するために
、それはVectorOfArray
A
ためconvert(Array,A)
を提供するために、インデックスのフォールバックを使用しています。
julia> using RecursiveArrayTools
julia> A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
3-element Array{Array{Int64,1},1}:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
julia> VA = VectorOfArray(A)
3-element Array{Array{Int64,1},1}:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
それの第一は、変換せずにインデックス付けを行うための怠惰なラッパーとして機能する:それはまだ「列優先」(すなわちへの効率的だということな方法ので列は別々の配列であることを
julia> VA[1,3]
7
注意インデックスダウン列)。しかし、それはストレートの変換があります。
julia> convert(Array,VA)
3×3 Array{Int64,2}:
1 4 7
2 5 8
3 6 9
、この変換を処理するための他の方法はhcat(A...)
ような何かをすることですが、あなたがスプラッティングしている配列の多くを持っている場合、それは遅いです!
ここで、あなたは考えるかもしれません:マトリックスをあらかじめ割り振ってからループしていっていっていって、それを埋める関数を書くのはどうですか? convert
がここで使用するフォールバックを除いて、ほとんどがVectorOfArray
のconvert
が動作していますが、Tim Holyのデカルト機械を使用しています。
function vecvec_to_mat(vecvec)
mat = Matrix{eltype(eltype(vecvec))}(length(vecvec),length(vecvec[1]))
for i in 1:length(vecvec)
mat[i,:] .= vecvec[i]
end
mat
end
が、フォールバックがはるかに高速だったので、私は、以来、それを取り除く得ている:ある時点で、私はその関数を書きました。だから、YMMVがあなたの問題を解決するいくつかの方法です。
は、単にこのようなVCAT()を使用することができます。私が探していたまさにです
julia> A = [[1,2,3],[4,5], [6,7]]
Vector{Int64}[3]
Int64[3]
Int64[2]
Int64[2]
julia> flat = vcat(A...)
Int64[7]
1
2
3
4
5
6
7
配列の配列の配列に対して機能しないようです。 – Timmmm
- 1. numpy配列を平滑化
- 2. jsonの配列をオブジェクトレベルに平滑化
- 3. PHP多次元配列の平滑化
- 4. PHP配列のSQLクエリー結果を平滑化
- 5. KVCで辞書の配列を平滑化
- 6. Java-再帰を使用して配列を平滑化
- 7. タプルのリストのリストを平滑化
- 8. Julia:タプルを配列に追加できません
- 9. タプル配列
- 10. Juliaで並列ループを返す配列を最適化する
- 11. ルビー内側平坦化(配列の配列)
- 12. Julia dataframeここで、列は配列の配列ですか?
- 13. 配列の理解コードを平坦化
- 14. 多次元配列Julia
- 15. Rプロット密度平滑化時系列
- 16. 3次元配列を平均化
- 17. Cで配列を平坦化する
- 18. 平坦化Javascriptのオブジェクト配列
- 19. タプルのフィルタnumpyの配列
- 20. ジュリアのタプルに配列
- 21. 非平坦化JSオブジェクトと配列
- 22. タプルの値を平滑化してRDDを変換する
- 23. Juliaでの共有配列の使用
- 24. juliaの型の中にある配列
- 25. Julia:配列との論理比較
- 26. Julia:配列の割り当て動作
- 27. numpyタプル配列にスカラー配列を掛ける方法
- 28. f#2次元配列を1次元配列に平坦化する
- 29. Python pandas:列内の配列で平坦化
- 30. 配列のJSON配列の逆シリアル化
!私の場合、それは配列だけでタプルはないので、それは私の問題ではありません。しかし、 "Iterators"パッケージを追加し、 "Iteratorsを使用して"呼び出すと、(REPL内の)flattenを使用しようとすると、関数が存在しないことがわかります。私はJulia 0.6.1にあります。 – Pigna
'Iterators'が組み込まれています。古い 'Iterators'パッケージは廃止されました。私はあなたが今それをインストールすれば何が起こるのか分からないが、何か問題があればそれをアンインストールする。エクスポートされたメソッド( 'flatten'を含む)を取得するためには' Base.Iterators'を使う必要があり、 'import Base.Iterators:flatten'はただ一つ取得する必要があります。 – gggg