微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

到点源的欧氏距离

如何解决到点源的欧氏距离

我正在通过位于(z 方向)上方的点源刺激模型——为了能够计算刺激的影响,我需要计算从该点电源到每个中间的欧几里德距离隔间(见图)。

我是这样试的,但是结果很奇怪——可能距离的计算是错误的...

x_Mid = np.zeros(nComp)
y_Mid = np.zeros(nComp)
z_Mid = np.zeros(nComp)
for i in range(0,nComp):
    y_Mid[i] = 0.
    if i == 0:
        x_Mid[i] = (lComp[i] / 2.)
        z_Mid[i] = 1*elecShift
        compdist[i] = distance.euclidean(x_Mid,y_Mid,z_Mid)*10**(-4)

    else:
        x_Mid[i] = x_Mid[i - 1] + (lComp[i - 1] / 2.) + (lComp[i] / 2.)
        z_Mid[i] = 1*elecShift
        compdist[i] = distance.euclidean(x_Mid,z_Mid)*10**(-4)

lcomp 是隔间的长度。 y - 方向为零,因为它是一个 2D 模型。 elecshift 是点源在 z 方向的距离,单位是微米(因此乘以 10^-4 得到厘米)。 nComp 是隔间的数量

从源到每个隔间中心的欧几里德距离的计算是否正确?

pic1

解决方法

我假设源位于 [0,0]

您可以用更简单的方式计算三个向量:

x_Mid = np.cumsum(lComp) - lComp / 2.
y_Mid = np.zeros_like(x_Mid)
z_Mid = elecShift * np.ones_like(x_Mid)

那么最简单的距离计算就是:

compDist = np.sqrt(x_Mid**2 + y_Mid**2 + z_Mid**2) * 1.e-4

甚至:

compDist = np.sqrt(x_Mid**2 + elecShift**2) * 1.e-4

如果你想使用function from scipy,那么根据API,使用:

for i in range(0,nComp):
  compDist[i] = distance.euclidean([x_Mid[i],y_Mid[i],z_Mid[i]],0.)*10**(-4)

您的代码将当前的 x_Mid 作为一个点,y_Mid 作为第二个,z_Mid 作为 distance.euclidean() 的权重。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。