对于在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匹配。即同时调用X的第一个元素和第一个元素,然后当调用a的第二个元素时,调用X的第二个元素。与b和Y相同。这应该产生一个20 * 20的数组当函数被调用一次时,使用X和Y中的所有值。
然后我想自动化代码以调用该函数500次。每次调用函数时,我都需要X和Y来生成新值。这样每次生成数组时,它都会有所不同,我可以使用np.dstack
来堆叠它们,gmean
沿第三轴(数组堆叠的位置)取几何平均值。
到目前为止,代码在使用gmean
之前生成了一个20 * 20 * 20的数组,这就是为什么我认为每次函数运行时它都会在数组X和Y中使用一个元素。如果它工作,我希望它应该产生一个20 * 20 * 500阵列。
答案 0 :(得分:1)
如果我正确理解您的意图,您可以使用zip
builtin来实现此目的。
Ddiff = np.dstack([f(n, x, y) for (x, y) in zip(X, Y)])
这应该使你的20长X
和你的20长Y
可以进行20次长度的迭代。
答案 1 :(得分:0)
此后我发现自己的生活很艰难。
<dg:DataGridTemplateColumn.CellStyle>
<Style TargetType="dg:DataGridCell">
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</dg:DataGridTemplateColumn.CellStyle>
我已将<dg:DataGridTemplateColumn.CellStyle>
<Style TargetType="dg:DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type dg:DataGridCell}">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</dg:DataGridTemplateColumn.CellStyle>
和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
。我还指定了仅使用X
和Y
调用的元素,因为它们是整数。然后我只使用一个虚拟索引来调用该函数500次。
a