gpt4 book ai didi

Python - For 沿网格对角线的循环

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:11 25 4
gpt4 key购买 nike

我有一个网格 x=np.linspace(-1,1,n); y=x。我使用 for 循环

为每个 xy 执行一些计算
for a,b in enumerate(x): 
for c,d in enumrate(y):
functionstuff(x,y)

为了节省时间,我只需要计算点 (-1,0)-(0,1)-(1,0)-(0,- 之间定义的对角线内的菱形1)。所以我想弄清楚如何最好地做到这一点。所以对于给定的 x,我想从 +(1-|x|)-(1-|x|)

那么我将如何通过调整较小的 y 之间的步长来解决这个问题(这样我就不会做 x = -1, y = 0 n 次)。

所以我可以制作一个 numpy.array 对象来循环:

for ii,x1 in enumerate(x1):

y = np.linspace(1-np.abs(x1),-(1-np.abs(x1)),2*round((1-np.abs(x1))/dy) + 1)
for jj,y1 in enumerate(y):
f[ii][jj] = DoStuff(x1,y1)
xplot[ii][jj] = x1
yplot[ii][jj] = y1

当我想查看 plot_surface(xplot,yplot,f) 时,我只得到一条沿对角线的线(我猜我必须定义 xplotyplot 在循环之前作为零数组)

最佳答案

numpy 中它有助于采取 advantage of broadcasting什么时候可以。在这种情况下,您可以设置一个二维网格,XY 并对其进行计算,而不是遍历 x 的元素和 y:

import numpy as np
x = np.linspace(-1,1,N)
y = x.copy()
X,Y = np.meshgrid(x,y,indexing='ij')
Z = functionstuff(X,Y)

您会发现这样的计算效率更高。

如果你想限制你的域,你可以通过屏蔽来实现:

MASK = (Y<=1+X) & (Y<=1-X) & (Y>=X-1) & (Y>=-X-1)
Z = np.zeros(X.shape)
Z[MASK] = functionstuff(X[MASK],Y[MASK])

如果 functionstuff = lambda x,y: exp(-(x**2+y**2)/2),则第一张图像中没有遮蔽结果,遮蔽结果为第二:

No Masking Masking

关于Python - For 沿网格对角线的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54638959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com