Python-用于沿网格对角线的循环

Python-用于沿网格对角线的循环,python,numpy,for-loop,numpy-ndarray,Python,Numpy,For Loop,Numpy Ndarray,我有一个网格,x=np.linspace(-1,1,n);y=x。我使用for循环对每个x和y执行一些计算 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 |) 因此,我如何在较小的ys之

我有一个网格,
x=np.linspace(-1,1,n);y=x
。我使用
for
循环对每个
x
y
执行一些计算

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
s之间调整步长(这样我就不会执行
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\u曲面(xplot,yplot,f)
时,我只得到一条沿着对角线的线(我猜我必须在循环之前将
xplot
yplot
定义为零数组)

numpy
中,如果可以的话,它会有帮助。在这种情况下,您可以设置二维网格,
X
Y
并在其上进行计算,而不是在
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])
MASK=(Y=-X-1)
Z=np.零(X.形)
Z[MASK]=functionstuff(X[MASK],Y[MASK])
如果
functionstuff=lambda x,y:exp(-(x**2+y**2)/2)
,则在第一幅图像中不会产生掩蔽,在第二幅图像中会产生掩蔽:


是的。我知道我有相同的数组(只是有助于理解我在做什么)。我不明白我如何通过只有一个名字而不是两个名字来让我的生活更轻松。你能举个例子吗?我不认为为你需要迭代的特定对角线准备一个正确索引数组有什么问题,我用我一直尝试的方法更新了它,但是我仍然没有得到我的菱形区域的图。