我有许多在算法中使用的大型多维NP阵列(2D和3D)。这里有很多迭代,在每次迭代期间,通过执行计算并保存到相同大小的临时数组中来重新计算数组。在一次迭代结束时,临时数组的内容被复制到实际的数据数组中。在NumPy中交换数组数据
例子:
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
的所有变量都将指向已更改的数据。
你可以举一个“其他范围内的数组的其他引用,这将不会改变”的例子吗? – dmytro 2012-03-31 09:49:53
例如,对于计算步骤,我可以(并且将)具有多个线程,用一个函数调用,其中字段作为参数传递。为了减少实例化它们循环的多个线程的开销。 – coderforlife 2012-04-01 03:57:20
如果我没有记错,除非您使用像sharedctypes数组等特定功能,否则无法在线程/进程之间传递数据。但我可能是错的...... – dmytro 2012-04-01 22:04:55