2016-12-16 11 views
3

計算とメモリの労力を最小限に抑えた2つのNumPyアレイをクロスオーバー(インデックス 'x'でテールを入れ替える)したい。2つのNumPyアレイを効率的にクロスする

import numpy as np 
a1 = np.zeros(10) 
a2 = np.ones(10) 
x = np.random.randint(1, a1.size) 
a1[:x], a2[:x] = a2[:x].copy(), a1[:x].copy() 

コピー文を避けるためにどのような方法があり、どんなにクロスオーバーはその場で行われているかどうかを次のように 現在、私はそれを行いますか?ありがとうございました!

答えて

4

1つのcopying保存するtmp変数を使用 -

tmp = a2[:x].copy() 
a2[:x], a1[:x] = a1[:x], tmp 

サンプル実行 -

1)開始時に()を割り当てる前:

In [322]: a1 
Out[322]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) 

In [323]: a2 
Out[323]: array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) 

In [324]: x 
Out[324]: 4 

2)提案コード:

In [325]: tmp = a2[:x].copy() 
    ...: a2[:x], a1[:x] = a1[:x], tmp 
    ...: 

3)結果を確認してください:

In [326]: a1 
Out[326]: array([ 1., 1., 1., 1., 0., 0., 0., 0., 0., 0.]) 

In [327]: a2 
Out[327]: array([ 0., 0., 0., 0., 1., 1., 1., 1., 1., 1.]) 
関連する問題