Используя приведенное ниже определение для массива, определенного как (a * b) в измерении, где a и b равны, скажем, например, 20.Так что а = б = 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, поэтому, когда я вызываю функцию, она создает массив a * b, который равен 20 * 20.Я бы хотел, чтобы каждый элемент X совпадал с a по мере его изменения.т. е. первый элемент a и первый элемент X вызываются одновременно, затем, когда второй элемент a называется вторым элементом X, вызывается и т. д. То же самое с b и Y. это должно создать один массив 20 * 20когда функция вызывается один раз, когда используются все значения в X и Y.
Тогда я бы хотел автоматизировать код для вызова функции 500 раз.Каждый раз, когда вызывается функция, мне нужны X и Y для генерации новых значений.Таким образом, каждый раз, когда создается массив, он будет другим, и я могу использовать np.dstack
, чтобы сложить их, и gmean
, чтобы взять среднее геометрическое по третьей оси (где массивы сложены).
Код до сих пор создает массив 20 * 20 * 20 перед использованием gmean
, поэтому я думаю, что он использует один элемент в массивах X и Y при каждом запуске функции.Если он работает так, как я надеюсь, он должен создать массив 20 * 20 * 500.