python - 到点源的欧几里德距离
问题描述
我正在通过位于上方(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,y_Mid,z_Mid)*10**(-4)
lcomp
是隔间的长度。y - 方向为零,因为它是 2D 模型。elecshift
是点源在 z 方向上的距离,单位是微米(因此乘以 10^-4,以厘米为单位)。nComp
是隔间的数量。
从源到每个隔间中心的欧氏距离的计算是否正确?
解决方案
我假设源在[0, 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
如果你想使用来自 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()
.
推荐阅读
- real-time-updates - jFugue可以同时使用两个播放器
- javascript - 如何在Javascript中将路径数组转换为对象?
- firebase - 如何在 Firebase 应用中生成安全邀请令牌?
- pdf - 如何制作将使用 IIS 直接下载 PDF 的 QR 码?
- c++ - 为什么逐个字符地读取字符比遍历整个文件字符串要快?
- docker - 您是否尝试将目录挂载到文件上(反之亦然)?检查指定的主机路径是否存在 - Docker from Windows WSL
- vb.net - 将数字转换为小时
- python - 仅使用 pandas 来获取给定开始时间、结束时间和可用时间块的 15 分钟时间块的所有可能组合?
- python - 如何使用 docker 运行 django 项目
- java - isInterrupted() 在 interrupt() 之后返回 false。中断是如何工作的?