开始于:
a,b=np.ogrid[0:n+1:1,0:n+1:1]
B=np.exp(1j*(np.pi/3)*np.abs(a-b))
B[z,b] = np.exp(1j * (np.pi/3) * np.abs(z - b +x))
B[a,z] = np.exp(1j * (np.pi/3) * np.abs(a - z +x))
B[diag,diag]=1-1j/np.sqrt(3)
这将生成一个用作矩阵的n*n网格。你知道吗
n只是一个用来表示指数的数字,即a*b矩阵,其中a和b都上升到n
其中z是常数,我选择用B[z,B]和B[a,z]公式替换行和列。(基本上是相同的公式,但在np.abs公司(a-b))
矩阵的对角线由底线给出:
B[diag,diag]=1-1j/np.sqrt(3)
在哪里
diag=np.arange(n+1)
我想重复这段代码50次,其中唯一的变化是x,所以我将以50个版本的B结束np.ogrid公司. x是一个随机生成的数字,每次介于-0.8和0.8之间。你知道吗
x=np.random.uniform(-0.8,0.8)
我想生成50个版本的B,每次随机值为x,并使用以下定义取50个版本B的几何平均值:
def geo_mean(y):
y = np.asarray(y)
return np.prod(y ** (1.0 / y.shape[0]), axis=-1)
我尝试将B设置为某个索引的函数,然后使用a for uin range():循环,但这不起作用。除了复制和粘贴块50次,并表示每一个为B1,B2,B3等,我想不出另一种方法来解决这个问题。你知道吗
编辑:
我现在正在使用给定解决方案的一部分,以便清楚地显示我要查找的内容:
#A matrix with 50 random values between -0.8 and 0.8 to be used in the loop
X=np.random.uniform(-0.8,0.8, (50,1))
#constructing the base array before modification by random x values in position z
a,b = np.ogrid[0:n+1:1,0:n+1:1]
B = np.exp(1j * ( np.pi / 3) * np.abs( a - b ))
B[diag,diag] = 1 - 1j / np.sqrt(3)
#list to store all modified arrays
randomarrays = []
for i in range( 0,50 ):
#copy array and modify it
Bnew = np.copy( B )
Bnew[z, b] = np.exp( 1j * ( np.pi / 3 ) * np.abs(z - b + X[i]))
Bnew[a, z] = np.exp( 1j * ( np.pi / 3 ) * np.abs(a - z + X[i]))
randomarrays.append(Bnew)
Bstack = np.dstack(randomarrays)
#calculate the geometric mean value along the axis that was the row in 2D arrays
B0 = geo_mean(Bstack)
在这个例子中,i
的每一次迭代都使用相同的X
值,我似乎找不到一种方法让I的每个新循环使用矩阵X
中的下一个值。我不确定python中的++操作,我知道它在python中不起作用,我只是不知道如何使用python等价物。我希望一个循环使用一个X
的值,然后下一个循环使用下一个值,依此类推,这样我就可以dstack
所有矩阵的末尾,并为堆叠矩阵中的每个元素找到一个geo_mean
。你知道吗
一种可行的方法是使用列表理解或生成器表达式:
但在你的具体例子中,我们可以做得更好; 利用恒等式
exp(a) x exp(b) = exp(a + b)
,我们可以将指数化后的几何平均数转换为指数化前的算术平均数。由于复数n次方根的多值性,几何平均值中出现了复数n次方根,因此需要小心一点。在下面的代码中,我们规范化了出现在range-pi,pi上的角度,以便始终与第n根相同。你知道吗另外请注意,您提供的
geo_mean
函数肯定是错误的。它没有通过基本的健全性检查,即对同一事物的副本取平均值应该返回同一事物。我提供了一个更好的版本。它仍然不是完美的,但我认为实际上没有完美的解决方案,因为复根的非均匀性。你知道吗因此,我建议在求幂之前取平均值。只要你的随机分布小于π,这就允许一个定义良好的平均过程,平均值实际上接近样本
我认为在处理问题时,您应该更多地依赖numpy功能。我自己不是一个numpy专家,所以肯定还有改进的空间:
它使用来自^{} 模块的几何平均函数来进行此计算。你知道吗
相关问题 更多 >
编程相关推荐