高效地交叉两个NumPy数组

4

我希望以最小的计算和内存开销交换(在索引“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()

有没有什么方法可以避免使用拷贝语句,无论是否在原位进行交叉操作?谢谢!

1个回答

7
使用一个 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.])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接