2016-12-16 101 views
3

我想交叉(在索引'x'處交換尾部)兩個NumPy數組,以最少的計算和內存工作量。 目前,我做如下:有效地交叉兩個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

使用tmp變量來保存一個copying -

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.])