配列をチャンクに分割する場合は、How do you split a list into evenly sized chunks? があります。 Numpyを使っている巨大な配列に対してもっと効率的にこれを行う方法はありますか?NumpyのNチャンクへの並列配列
答えて
セクションの数でアレイのサイズを適切に分割する必要がない場合は、numpy.split
またはおそらくnumpy.array_split
を探していると思います。
Prashantに尋ねたのと同じ質問。どのようにして空の配列を取り除くことができますか? –
お試しnumpy.array_split
ドキュメントから
:
>>> x = np.arange(8.0)
>>> np.array_split(x, 3)
[array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7.])]
numpy.split
と同じですが、グループが同じ長さでない場合は例外を発生しません。
チャンク> LEN(配列)の数は、あなたはそれに対処するために、内部にネストされた空白の配列を取得した場合 - あなたの分割配列がa
に保存されている場合、あなたは、空の配列を削除することができます。
[x for x in a if x.size > 0]
だけ保存あなたが望むならば、a
に戻る。
どうすれば空リストを削除できますか? –
小さな例がありますか? –
if#chunks> len(array)空の配列が内部にネストされます。 –
array_split、split, hsplit and vsplitの使用上のちょうどいくつかの例:
n [9]: a = np.random.randint(0,10,[4,4])
In [10]: a
Out[10]:
array([[2, 2, 7, 1],
[5, 0, 3, 1],
[2, 9, 8, 8],
[5, 7, 7, 6]])
array_splitを使用して上のいくつかの例:
あなたは2番目の引数として配列またはリストを与える場合は、基本的にインデックスを与える(前)」へカット '
# split rows into 0|1 2|3
In [4]: np.array_split(a, [1,3])
Out[4]:
[array([[2, 2, 7, 1]]),
array([[5, 0, 3, 1],
[2, 9, 8, 8]]),
array([[5, 7, 7, 6]])]
# split columns into 0| 1 2 3
In [5]: np.array_split(a, [1], axis=1)
Out[5]:
[array([[2],
[5],
[2],
[5]]),
array([[2, 7, 1],
[0, 3, 1],
[9, 8, 8],
[7, 7, 6]])]
2番目の引数として整数。 等しいチャンクの数を指定します。
In [6]: np.array_split(a, 2, axis=1)
Out[6]:
[array([[2, 2],
[5, 0],
[2, 9],
[5, 7]]),
array([[7, 1],
[3, 1],
[8, 8],
[7, 6]])]
分割が同じに動作しますが、同等の分割は、あなたがvsplitとhsplitショートカットを使用することができますarray_splitに加えて
ことができない場合は、例外を発生させます。
In [11]: np.vsplit(a, 2)
Out[11]:
[array([[2, 2, 7, 1],
[5, 0, 3, 1]]),
array([[2, 9, 8, 8],
[5, 7, 7, 6]])]
In [12]: np.hsplit(a, 2)
Out[12]:
[array([[2, 2],
[5, 0],
[2, 9],
[5, 7]]),
array([[7, 1],
[3, 1],
[8, 8],
[7, 6]])]
これは私の問題は、チャンク> len(配列)の場合、空のネストされた配列を取得する...あなたはどのようにそれを取り除くのですか? –
良い例です、ありがとうございます。あなたの 'np.array_split(a、[1]、axis = 1)'の例では、最初の配列がすべての要素をネストしないようにする方法を知っていますか? – timgeb
ないかなりの答えが、他の(正しい)の回答にコードの素敵なフォーマットと長いコメント:
vsplitとhsplitはかなり自己explanatryです。以下を試してみると、コピーではなく元の配列のビューが表示されていることがわかります。リンクされた質問で受け入れられた回答の場合はそうではありません。起こり得る副作用に注意してください!
>>> x = np.arange(9.0)
>>> a,b,c = np.split(x, 3)
>>> a
array([ 0., 1., 2.])
>>> a[1] = 8
>>> a
array([ 0., 8., 2.])
>>> x
array([ 0., 8., 2., 3., 4., 5., 6., 7., 8.])
>>> def chunks(l, n):
... """ Yield successive n-sized chunks from l.
... """
... for i in xrange(0, len(l), n):
... yield l[i:i+n]
...
>>> l = range(9)
>>> a,b,c = chunks(l, 3)
>>> a
[0, 1, 2]
>>> a[1] = 8
>>> a
[0, 8, 2]
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8]
+1)これは考慮すべき点ですが、特定のmultidimを処理するためにソリューションをさらに拡張することができます。ケース –
はい、私はそれを使用しています。私はnumpyを使ってそれを行うより良い方法が不思議でした。特にマルチダムで:( –
これは大きなデータに関連しています。私は 'numpy.array_split'を使ってデータのコピーを作成していますが、それをあなたのマルチプロセッシングプールに渡すと、 – displayname
- 1. (n、1)と(n、)のnumpy配列
- 2. numpy:(n、)配列を(n、1)配列にキャストする構文/イディオム?
- 3. numpyで(n)D配列から(n-1)D配列を選択
- 4. N次元の配列 - Python/Numpy
- 5. numpyの配列に並べ替える
- 6. numpyの配列
- 7. 効率的なpython配列からnumpy配列への変換
- 8. numpyでn次元配列に行列を追加する
- 9. ヒストグラムのnumpy配列
- 10. numpy配列のn要素ごとに平均化する
- 11. 配列[n]と配列[]の違いは?
- 12. C++のNumPyスタイルの配列?
- 13. 4D配列をインデックスするNumPy配列
- 14. Python、numpyソート配列
- 15. Cython numpy配列インデックス
- 16. numpy配列with cython
- 17. numpy配列のマスク値
- 18. フォーマットはnumpyの配列
- 19. 配列のcython/numpy型
- 20. numpyの配列をmatlab
- 21. 2048バイトのチャンクへのスリップ文字列
- 22. スパース行列とnumpy配列の使用
- 23. numpy配列間の距離、列方向
- 24. 配列への配列MIPS
- 25. CythonのNumPyレコード配列のカラムへのアクセス
- 26. numpy配列でのオブジェクトのプロパティへのアクセス
- 27. 構造化numpy配列へのフィールドの追加
- 28. numbaのnumpy配列へのアクセスを最適化
- 29. 2D numpy配列のリストを3D numpy配列に変換しますか?
- 30. 並列配列をソートJava
私はまだ効率的な答えを探しています;)。今私はctypesが唯一の効率的な方法だと思っています。 –
効率を定義します。いくつかのサンプルデータ、あなたの現在の方法、それがどれほど速く、どれくらい速く必要なのかを教えてください。 –