行列X (1000x10)
と行列Y (20x10)
を持っています。効率的にを(20x10)
ブロックのブロックX
に繰り返し追加します(したがって50ブロック)。 numpyでこれを行う効率的な方法はありますか? np.repeat
を元の行列が巨大で、不要な重複を防ぐためにY
を使用したいとは思いません。何か案は?Numpyは別の行列のスライスに行列を加えます
0
A
答えて
2
あなたが操作を実行するargument list unpacking、NumPy broadcastingとthe fact that ndarray.reshape()
returns a viewを活用することができます
tmp = X.reshape(-1, *Y.shape)
tmp += Y
追加のデータが割り当てられていないと、これらの操作の後、X
されます操作の結果が含まれます。
0
あなたが「拡大」するnp.tile
を使用することができます。これは一時的な大規模な配列のメモリ内に作成されます
x = np.zeros([1000,10])
y = np.ones([20,10])
new_x = x + np.tile(y,(50,1))
例えば(より正確に、タイル)より大きな配列のサイズに合わせて、より小さな配列、 x
に追加してください。すぐに破棄されますので、メモリ容量とアレイのサイズによって異なりますが、CPU使用率と可読性の面で最も効率的です。
もう1つの選択肢はもちろん、より大きなアレイをループし、そのすべての部分(この場合は50回)にブロードキャストしますが、CPUの方が時間がかかり、効率は低くなりますが、記憶が軽い
第二オプションの例:
for i in range(0,len(x),20):
x[i:i+20,:] = y
関連する問題
- 1. numpy行列内の特定の行と列をスライス
- 2. Numpy:1つの行と列を削除するためのスライス行列
- 3. Numpy - 配列から2次元の行または列ベクトルをスライスする
- 4. Numpyのベクトルから行列のスライスを作成する
- 5. NumPy配列に行を追加する
- 6. numpyの行列
- 7. 非スライスnumpyの配列
- 8. 空のCSR疎行列に別のcsr行列の列を入れ、それをスライスします
- 9. NumPy行列をNumPy配列にコピー
- 10. numpyで2次元配列の行スライスをゼロにする方法は?
- 11. numpyで配列をスライスしますか?
- 12. numpyで別の行列のインデックスとして空の行列を使用する
- 13. numpy配列の基本スライスと高度スライシングを区別する
- 14. 私は2つのnumpyの行列を持つ2つのnumpyの行列を
- 15. 2D numpy行列を2D numpy配列に変換します。
- 16. 別の行列を使用してNumPy行列をサブセット化する
- 17. Numpy:ループのない別の行列の全要素から行列を引く
- 18. numpy rec配列にデータ列を1行だけ追加する
- 19. numpyでn次元配列に行列を追加する
- 20. numpyの検査行列は、列
- 21. 合計n番目の列には、私は、次のnumpyの行列を持ってnumpyの行列
- 22. 行列の行と列をnumpyで効率的にテストする
- 23. デフォールトディクティックをnumpy行列または2次元行列のCSVに変換する
- 24. オブジェクトデータをアクセスするnumpy配列をスライス
- 25. numpy配列に別の列を追加する
- 26. Numpyは行列の配列を作成します
- 27. クラスラベルにしたがってnumpyデータ配列の行を個別のnumpy配列で選択する方法は?
- 28. 行列の列を他の行列の列に追加する
- 29. 辞書付きNumPy配列のスライス
- 30. numpyで行列の内側に行列を付ける
違いは、 'X.reshape()+ Y'を計算すると新しい配列が割り当てられ、' tmp + = Y'はすでに割り当てられている値を変更します。追加のRAMは割り当てられません。そして、 'X'は形を変えないので、出力は正しい形になります。 –
入手しました。ありがとう。 –
うわー!これは私にとって魔法に見えます!どのように機能するのですか? '* Y.shape'は何かを説明できますか? 'X.reshape(-1、* Y.shape)'が 'X'を' tmp'にコピーしないのはなぜですか? ( 'X'と似ていますか?)ありがとうございました! – Babak