gpt4 book ai didi

python - 尝试在定义循环中使用双重条件(?)

转载 作者:行者123 更新时间:2023-12-01 09:27:41 25 4
gpt4 key购买 nike

使用下面的定义将数组定义为维度 (a*b),其中 a 和 b 相等,例如 20。所以a=b=20。 20*20 矩阵/数组。

import numpy as np
from numpy.linalg import inv
from scipy.stats import gmean

for n in range(20,21,1):

X=np.random.uniform(-0.3,0.3,(n))
Y=np.random.uniform(-0.3,0.3,(n))

a,b=np.ogrid[-1:n-1:1,-1:n-1:1]

def f(n, x, y):
D=np.array(np.exp(1j*(5*np.pi/6)*np.abs((a+x)-(b+y))))
D[diag,diag]=1-1j/np.sqrt(3)
#this diag line is just to choose the diagonal elements specifically as they never change.
return D

Ddiff = np.abs(np.dstack(inv([f(n, x, y) for x,y in zip(X,Y)])))
D2diff = gmean(Ddiff,axis=-1)

我认为这段代码产生的是,每次调用该函数时,它都会获取 X 和 Y 的第一个元素并在整个迭代中使用。所以在这个例子中 n=20,所以当我调用该函数时,它将产生一个 20*20 的 a*b 数组。我希望 X 的每个元素在变化时与 a 相匹配。即a的第一个元素和X的第一个元素同时被调用,然后当a的第二个元素被调用时,X的第二个元素被调用等等。与b和Y相同。这应该产生一个20*20的数组当函数被调用一次时,X 和 Y 中的所有值都被使用。

然后我想自动化代码来调用该函数 500 次。每次调用该函数时,我都需要 X 和 Y 来生成新值。这样,每次生成数组时,它都会有所不同,我可以使用 np.dstack 来堆叠它们,并使用 gmean 沿第三轴取几何平均值(其中数组是堆叠的)。

到目前为止,代码在使用 gmean 之前会生成一个 20*20*20 的数组,这就是为什么我认为每次函数运行时它都会使用数组 X 和 Y 中的一个元素。如果它按我希望的那样工作,它应该生成一个 20*20*500 的数组。

最佳答案

如果我正确理解您的意图,您可以通过 zip builtin 来实现此目的。

Ddiff = np.dstack([f(n, x, y) for (x, y) in zip(X, Y)])

这应该可以从 20 长的 X 和 20 长的 Y 中生成一个 20 长的迭代。

关于python - 尝试在定义循环中使用双重条件(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50236942/

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