相关疑难解决方法(0)

如何用NumPy计算欧氏距离?

我在3D中有两点:

(xa, ya, za)
(xb, yb, zb)
Run Code Online (Sandbox Code Playgroud)

我想计算距离:

dist = sqrt((xa-xb)^2 + (ya-yb)^2 + (za-zb)^2)
Run Code Online (Sandbox Code Playgroud)

使用NumPy或Python的最佳方法是什么?我有:

a = numpy.array((xa ,ya, za))
b = numpy.array((xb, yb, zb))
Run Code Online (Sandbox Code Playgroud)

python numpy euclidean-distance

466
推荐指数
15
解决办法
65万
查看次数

两个不同Numpy阵列中点之间的最小欧几里德距离,而不是在

我有两个x - y坐标数组,我想找到一个数组中每个点与另一个数组中所有点之间的最小欧几里德距离.阵列的大小不一定相同.例如:

xy1=numpy.array(
[[  243,  3173],
[  525,  2997]])

xy2=numpy.array(
[[ 682, 2644],
[ 277, 2651],
[ 396, 2640]])
Run Code Online (Sandbox Code Playgroud)

我目前的方法遍历每个坐标xyxy1计算之间的协调距离和其他坐标.

mindist=numpy.zeros(len(xy1))
minid=numpy.zeros(len(xy1))

for i,xy in enumerate(xy1):
    dists=numpy.sqrt(numpy.sum((xy-xy2)**2,axis=1))
    mindist[i],minid[i]=dists.min(),dists.argmin()
Run Code Online (Sandbox Code Playgroud)

有没有办法消除for循环,并以某种方式在两个数组之间进行逐元素计算?我设想生成一个距离矩阵,我可以在其中找到每行或每列中的最小元素.

另一种看待问题的方法.假设我将xy1(长度为m)和xy2(长度为p)连接成xy(长度为n),并存储原始数组的长度.从理论上讲,我应该能够从那些我可以获取mxp子矩阵的坐标生成一个nxn距离矩阵.有没有办法有效地生成这个子矩阵?

python numpy euclidean-distance

39
推荐指数
5
解决办法
3万
查看次数

Python:来自3个列表的2d等高线图:x,y和rho?

我在python和matplotlib中有一个简单的问题.我有3个列表:x,y和rho,其中rho [i]是点x [i],y [i]处的密度.x和y的所有值都在-1之间.1.但它们没有特定的顺序.

如何制作密度rho的轮廓图(如imshow)(在点x,y处插值).

非常感谢你.

编辑:我使用大型数组:x,y和rho有10,000到1,000,000个元素

python matplotlib contour

28
推荐指数
2
解决办法
6万
查看次数

python/scipy中的多元样条插值?

是否有库模块或其他直接的方法在python中实现多元样条插值?

具体来说,我在一个规则间隔的三维网格上有一组标量数据,我需要在分散在整个域中的少量点进行插值.对于二维,我一直在使用scipy.interpolate.RectBivariateSpline,我实际上是在寻找三维数据的扩展.

我发现的N维插值例程还不够好:我更喜欢使用LinearNDInterpolator上的样条线来获得平滑度,而且我有太多的数据点(通常超过一百万),例如,径向基函数可以工作.

如果有人知道可以执行此操作的python库,或者我可以调用或移植的另一种语言,我真的很感激.

python interpolation numpy scipy

27
推荐指数
1
解决办法
2万
查看次数

在不规则网格上插值

所以,我有三个numpy数组,它们在网格上存储纬度,经度和一些属性值 - 也就是说,我有LAT(y,x),LON(y,x),并说温度T(y,x) ),对于x和y的某些限制.网格不一定是规则的 - 事实上,它是三极的.

然后我想将这些属性(温度)值插值到一堆不同的纬度/经度点(存储为lat1(t),lon1(t),大约10,000吨......),这些点不落在实际网格点上.我已经尝试了matplotlib.mlab.griddata,但这需要太长时间(毕竟它并不是为我正在做的事情设计的).我也试过scipy.interpolate.interp2d,但是我得到了一个MemoryError(我的网格大约是400x400).

有没有任何光滑的,最好快速的方式这样做?我不禁想到答案显而易见......谢谢!!

python interpolation numpy scipy

22
推荐指数
2
解决办法
2万
查看次数

高度图生成算法?

我正在环顾互联网,无法找到解决此特定问题的完美算法:

我们的客户有一组点数和重量数据以及每个点,如下图所示:

加权点http://chakrit.net/files/stackoverflow/so_heightmap_points.png

其中,我们有一个GIS程序,可以从这些点和它们的重量值生成"高度图"或一种地形数据但是因为我们有近千个数据点并且这些将随着时间的推移而变化,我们希望创建我们自己的工具来自动生成这些高度图.

到目前为止,我已经尝试计算每个像素从其到最近数据点的Sqrt((x1 - x2) ^ 2 + (y1 - y2) ^ 2)距离的权重,并将权重和距离因子应用于数据点的颜色,以生成该特定像素的结果渐变颜色:

heightmap结果http://chakrit.net/files/stackoverflow/so_heightmap_result.png

您可以看到某些数据点配置仍然存在问题,并且当存在大量数据点时,算法有时会生成相当多边形的图像.理想的结果应该看起来更像一个省略号,而不像多边形.

这是维基百科关于渐变上升的文章中的一个示例图像,它展示了我想要的结果:

山http://chakrit.net/files/stackoverflow/so_gradient_descent.png

渐变上升算法不是我感兴趣的.我感兴趣的是什么; 是首先计算该图中原始函数的算法,提供具有权重的数据点.

我没有参加拓扑数学课程,但我可以做一些微积分.我想我可能会遗漏一些东西,而且我宁愿迷失在Google搜索框中输入的内容.

我需要一些指示.

谢谢!

gis algorithm arcgis geospatial heatmap

16
推荐指数
2
解决办法
6928
查看次数

K最近的邻居在python中

我想在python中计算K-最近邻居.我应该使用什么库?

python scipy knn

13
推荐指数
2
解决办法
3万
查看次数

填补numpy数组中的空白

我只想用最简单的术语插入3D数据集.线性插值,最近邻,所有这些就足够了(这是从一些算法开始,所以不需要准确的估计).

在新的scipy版本中,像griddata这样的东西会很有用,但是目前我只有scipy 0.8.所以我有一个"立方体"(data[:,:,:],(NixNjxNk))数组,以及一个相同大小的标志(flags[:,:,:,],TrueFalse)数组.我想插入数据元素的数据,其中flag的对应元素为False,例如使用数据中最近的有效数据点,或者"close by"点的某种线性组合.

数据集中至少有两个维度可能存在较大的间隙.除了使用kdtrees或类似编码完整的最近邻算法之外,我无法真正找到通用的N维最近邻插值器.

python interpolation numpy matplotlib scipy

12
推荐指数
2
解决办法
6767
查看次数

多变量插值的哪种方法最适合实际使用?

在彼得·阿尔弗雷德(Peter Alfred)关于多变量散乱数据插值的文章中,他提到,从各种方案中,只有少数在实践者中非常受欢迎.他以Shepard的方法和Hardy Multiquadrics命名.但是这篇文章到现在已经有近20年的历史了,真正有趣的是现在广泛使用的方法.

如果您有使用某些空间插值方案的经验,请告诉它.

UPD:为了使这个问题更具竞争力,我重申了它.这是"你曾经使用过多种插值的方法吗?"

interpolation

11
推荐指数
3
解决办法
7005
查看次数

查找列表中邻居的最有效方法

我有一个2016年的长度列表,但只有242包含数据,其余的设置为无.我的目标是在值之间插值以用IDW(反距离加权)的简单形式填充所有间隙.所以我的脚本的任务是:

  • 迭代myList的所有项目
  • 如果myList包含一个值(不是 None),只需复制它即可
  • 如果在myList中找到"无",则通过计算myList中所有项目的距离来获取左右邻居的位置/值
  • 计算两个邻居间隙的内插值(它们离开的距离越远,它们的重量就越小)

假设我们只有一个较小的列表,只有14个项目(5个有效项目):

myList = [26, None, None, None, 31, None, None, 58, None, 42, None, None, None, 79]
resultList = [None] * len(myList)

for i in range(len(myList):
    if not myList[i] is None:
        resultList[i] = myList[i]
    else:
        distance = [i - j for j in range(len(myList)) if not myList[j] is None]
        neighbors = min([n for n in dist if n>0]), max([n for n in dist if n<0])
        # rest of the interpolation (not important for …
Run Code Online (Sandbox Code Playgroud)

python list python-2.7

8
推荐指数
1
解决办法
1200
查看次数

为什么 np.hypot 和 np.subtract.outer 与普通广播相比非常快?使用 Numba 并行加速 numpy 进行距离矩阵计算

我有两组大的 2D 点,我需要计算一个距离矩阵。

我需要它在 python 中运行得很快,所以很明显我使用了 numpy。我最近了解了 numpy 广播并使用了它,而不是在 python 中循环,numpy 将在 C 中进行。

我真的认为广播就是我所需要的,直到我看到其他方法比普通广播更好,我有两种计算距离矩阵的方法,但我不明白为什么一种比另一种更好。

我在这里查找https://github.com/numpy/numpy/issues/14761并且我得到了相互矛盾的结果。

下面是两种计算距离矩阵的方法

单元格 [3, 4, 6] 和 [8, 9] 都计算距离矩阵,但 3+4 使用减法。outer 比使用 vanilla 广播的 8 快,使用 hypot 的 6 比 9 快,这很简单道路。我没有尝试在 python 循环中假设它永远不会完成。

我想知道

1. 有没有更快的方法来计算距离矩阵(可能是 scikit-learn 或 scipy)?

2.为什么hypot和subtract.outer这么快?

为了方便起见,我还附上了代码段 tp run 整个事情,并更改了种子以防止缓存恢复

### Cell 1
import numpy as np

np.random.seed(858442)

### Cell 2
%%time
obs = np.random.random((50000, 2))
interp = np.random.random((30000, 2))

CPU times: user 2.02 ms, sys: 1.4 …
Run Code Online (Sandbox Code Playgroud)

python numpy vectorization python-3.x numba

6
推荐指数
1
解决办法
207
查看次数