【发布时间】:2022-11-06 02:22:56
【问题描述】:
我有一个形状为(nx,ny) 的二维numpy 数组psi。我想创建一个形状相同的新数组phi,其中对于每个元素phi[i][j],我需要评估一个包含psi[i][j] 和相邻元素psi[i-1][j]、psi[i+1][j]、psi[i][j+1] 和psi[i][j-1] 的表达式,除了这些邻居中的任何一个不在psi 范围内的边缘情况外,在表达式中将该元素视为0。
我可以使用嵌套的 for 循环并检查边界条件来实现这一点,但我希望尽可能高效地执行此操作。我试过分配
phi[1:-1,1:-1] = f(psi[1:-1,1:-1], psi[0:-2,1:-1], psi[2:,1:-1], psi[1:-1,0:-2], psi[1:-1,2:])
但这不包括会变得混乱的边缘情况,所以如果有一些条件方法只能在界限内引用,否则只是0 它可能会起作用。或者,当然,如果有一种更省时的方法会更好。
【问题讨论】:
-
你能告诉我们你想要评估的表达式是什么吗?
-
您可以在
psi的顶部和底部填充一行零,在左侧和右侧填充一列零。只有这样,您才需要在索引中考虑到这一点。例如,phi[i][j]将对应于psi[i+1][j+1] -
@AJH 在 x 和 y 中数值取二阶偏导数作为哈密顿,所以类似于
-0.5*( (psi[i-1][j] + psi[i+1][j] - 2*psi[i][j])/dx**2 + (psi[i][j-1] + psi[i][j+1] - 2*psi[i][j])/dy**2) -
@stelioslogothetis 不敢相信我没想到,我现在就试试,谢谢!
标签: python arrays numpy indexing conditional-statements