我之前曾问过类似的问题(Finding the closest to value in two datasets using a for loop?),但是由于添加了第三个维度,我遇到了一个略有不同的问题,因为我有两个不同的独立参数,因此我现在陷入了另一种困境。
import numpy as np
import math
f_exp = np.array([1, 1.6, 2.7, 4.4, 7.3, 12, 20, 32, 56, 88, 144, 250000])
e_exp = np.array([7.15, 7.30, 7.20, 7.25, 7.26, 7.28, 7.32, 7.25, 7.35, 7.34, 7.37, 13.55])
n_e_exp = len(e_exp)
ezero = 7.15
einf = 13.55
fc = np.arange(1,11000,1000)
alpha = np.arange(0,1.1,0.1)
log_f_mod = np.arange(-3, 6.5, 0.5)
f_mod = 10 ** log_f_mod
n_f_mod = len(f_mod)
n_fc = len(fc)
n_alpha = len(alpha)
x = np.zeros((n_f_mod, n_fc))
eR = np.zeros((n_alpha, n_f_mod, n_fc))
eI = np.zeros((n_alpha, n_f_mod, n_fc))
e_mod = np.zeros((n_alpha, n_f_mod, n_fc))
invQ = np.zeros((n_alpha, n_f_mod, n_fc))
for i in range(n_alpha):
for j in range(n_f_mod):
for k in range(n_fc):
x[j,k] = np.log(f_mod[j] / fc[k])
eR[i,j,k] = einf + 1/2 * (ezero - einf) * (1 - np.sinh((1 - alpha[i]) * x[j,k]) / (np.cosh((1 - alpha[i]) * x[j,k]) + np.cos(alpha[i] * math.pi / 2)))
eI[i,j,k] = np.abs(1/2 * (ezero - einf) * np.cos(alpha[i] * math.pi / 2) / (np.cosh((1 - alpha[i]) * x[j,k]) + np.sin(alpha[i] * math.pi / 2)))
e_mod[i,j,k] = np.sqrt(eR[i,j,k] ** 2 + eI[i,j,k] ** 2)
invQ[i,j,k] = eI[i,j,k] / eR[i,j,k]
到目前为止,我已经成功计算了eR
,eI
,e_abs
和invQ
的所有场景,作为x
和{的函数{1}}(变化的独立参数)。现在,我需要通过找到alpha
最接近e_mod
的{{1}}和e_exp
的值来使x
适应alpha
。在上一个问题中,我只有一个自变量,因此可以执行以下操作:
e_mod
然后,我尝试通过以下方式将其制作为3D:
e_exp
index = np.zeros((n_e_exp, n_fc), dtype=int)
value = np.zeros((n_e_exp, n_fc))
for l in range(n_fc):
for m in range(n_e_exp):
index[m,l] = np.argmin(np.abs(np.sqrt((e_abs[:,l] - e_exp[m]) ** 2 + (f_mod[:] - f_exp[m]) ** 2))
value[m,l] = np.min(np.abs(np.sqrt((e_abs[:,l] - e_exp[m]) ** 2 + (f_mod[:] - f_exp[m]) ** 2)[index[m,l]]))
BFE = [np.sum(value[:,_]) for _ in range(n_fc)]
M = np.min(BFE)
I = np.array(np.where(M == BFE))
I = I[0]
和n_e_abs = len(e_abs)
index = np.zeros((n_e_abs, n_e_exp, n_fc), dtype=int)
value = np.zeros((n_e_abs, n_e_exp, n_fc))
for a in range(n_e_abs):
for m in range(n_e_exp):
for l in range(n_fc):
index[a,m,l] = np.argmin(np.abs(np.sqrt((e_abs[a,:,l] - e_exp[m]) ** 2 + (f_mod[:] - f_exp[m]) ** 2)))
value[a,m,l] = np.min(np.abs(np.sqrt((e_abs[a,:,l] - e_exp[m]) ** 2 + (f_mod[:] - f_exp[m]) ** 2)[index[a,m,l]]))
BFE = [np.sum(value[:,_]) for _ in range(n_fc)]
M = np.min(BFE)
I = np.array(np.where(M == BFE))
I = I[0]
的索引和值?我需要找到它们两者,以便可以在同一图中绘制fc
与alpha
以及最接近e_exp
与f_exp
的版本。是最终目标。
对于真正的具体问题,我确实表示歉意,我试图使其更加概括和简化,而没有任何运气。