有效地交叉两个NumPy数组

Rob*_*bin 3 python arrays numpy

我想用最少的计算和内存工作交叉(交换索引“ x”处的尾部)两个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()
Run Code Online (Sandbox Code Playgroud)

有没有办法避免复制语句,无论交叉是否就地完成?谢谢!

Div*_*kar 5

使用tmp变量保存一个copying-

tmp = a2[:x].copy()
a2[:x], a1[:x]  = a1[:x], tmp
Run Code Online (Sandbox Code Playgroud)

样品运行-

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
Run Code Online (Sandbox Code Playgroud)

2)建议代码:

In [325]: tmp = a2[:x].copy()
     ...: a2[:x], a1[:x]  = a1[:x], tmp
     ...: 
Run Code Online (Sandbox Code Playgroud)

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.])
Run Code Online (Sandbox Code Playgroud)