DD
是大小为(Nx, Ny)
的2D数组。
Ux
和Uy
是两个大小相同的整数二维数组,它们定义了如何在新矩阵DD
中移动DD_new
的值。
例如,如果Ux[0,0]=2
和Uy[0,0]=3
,则值DD[0,0]
将存储在DD_new[2,3]
中。如果需要将DD
的多个值存储在DD_new
的相同位置中,则将它们相加。
我正在寻找一种优化的脚本,以尽快执行此“替换”操作。
我已经有一个简短的脚本,但是如果有人知道如何使用矩阵和数组操作对其进行改进,它将对我有帮助:
XX, YY = np.meshgrid(range(Nx), range(Ny))
XX_new = (XX + Ux).astype(int)
YY_new = (YY + Uy).astype(int)
for ix in range(Nx):
for iy in range(Ny):
x_new = XX_new[ix, iy]
y_new = YY_new[ix, iy]
if (x_new >= 0) and (x_new < Nx) and (y_new >= 0) and (y_new < Ny):
DD_new[x_new, y_new] += DD[XX[ix, iy], YY[ix, iy]]
此外,如果有人知道如何使用非整数矩阵Ux
和Uy
,以及通过在矩阵{{ 1}},它可以帮助我!
答案 0 :(得分:0)
您可以使用np.add.at
来做到这一点:
import numpy as np
DD = [[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]]
Ux = [[ 0, 1, 2, 0],
[ 1, 2, 0, 1],
[ 2, 0, 2, 1]]
Vx = [[ 0, 1, 2, 3],
[ 0, 1, 2, 3],
[ 0, 1, 2, 3]]
DDnew = np.zeros_like(DD)
np.add.at(DDnew, (Ux, Vx), DD)
print(DDnew)
# [[ 1 10 7 4]
# [ 5 2 0 20]
# [ 9 6 14 0]]