有没有更优雅和简洁的方法来计算一组点和一个固定点之间的距离而不是这样做?
real, dimension(3, numPoints) :: points
real, dimension(3) :: source
real, dimension(numPoints) :: r
r = sqrt((points(1,:) - source(1))**2 + &
(points(2,:) - source(2))**2 +
(points(3,:) - source(3))**2)
我试过
r = sqrt(sum((points - source)**2,1))
但不出所料 - 这不起作用。
答案 0 :(得分:1)
如果你有一个最新的编译器,它实现了在2008版本中添加到Fortran的内部函数,下面的表达式可能满足你对一个距离计算的优雅和简洁的想法:
r(1) = norm2(points(:,1)-source)
如果您没有最新的编译器,您可能会发现您的编译器具有L2标准的非标准函数或者您有一个库挂在那个库中实现它。
我没有在这台机器上安装Fortran,因此将其重新设计为计算所有点距source
的距离的单线程,我将其留给感兴趣的读者。但是我不会嗅到依次循环所有点的明显解决方案。
编辑:好的,这是一个单行的,未经测试的
r = norm2(points-spread(source,dim=1,ncopies=numpoints),dim=2)