在3D和2D阵列中找到点之间的最近距离

时间:2019-03-23 10:12:37

标签: python numpy

我之前曾问过类似的问题(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]

到目前为止,我已经成功计算了eReIe_absinvQ的所有场景,作为x和{的函数{1}}(变化的独立参数)。现在,我需要通过找到alpha最接近e_mod的{​​{1}}和e_exp的值来使x适应alpha 。在上一个问题中,我只有一个自变量,因此可以执行以下操作:

e_mod

然后,我尝试通过以下方式将其制作为3D:

e_exp
  • 如何转换上面最合适的代码以用于3D数组,而3D数组的目标是找到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] 的索引和值?

我需要找到它们两者,以便可以在同一图中绘制fcalpha以及最接近e_expf_exp的版本。是最终目标。

对于真正的具体问题,我确实表示歉意,我试图使其更加概括和简化,而没有任何运气。

0 个答案:

没有答案