我有许多大型的多维 NP 数组(2D 和 3D),用于算法中。在此过程中有许多迭代,每次迭代都会通过计算并保存到相同大小的临时数组中来重新计算数组。在单个迭代结束时,将临时数组的内容复制到实际数据数组中。
例如:
global A, B # ndarrays
A_temp = numpy.zeros(A.shape)
B_temp = numpy.zeros(B.shape)
for i in xrange(num_iters):
# Calculate new values from A and B storing in A_temp and B_temp...
# Then copy values from temps to A and B
A[:] = A_temp
B[:] = B_temp
这个方法可以正常工作,但是复制所有的值来交换数组看起来有点浪费。实际上,只需要将 A 和 B 交换即可。以下是交换数组的代码:
A, A_temp = A_temp, A
B, B_temp = B_temp, B
然而,在其他作用域中可能存在对数组的其他引用,这不会改变。
似乎NumPy可以有一种内部方法来交换两个数组的内部数据指针,例如numpy.swap(A, A_temp)
。然后所有指向A
的变量都将指向更改后的数据。