问题标签 [scipy-spatial]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
352 浏览

python - 内存有效的平均成对距离

我知道scipy.spatial.distance.pdist函数以及如何从结果矩阵/ndarray 计算平均值。

在上面的示例中y变得非常大(几乎是输入数组的 2,500 倍):

但由于我只对平均成对距离感兴趣,因此不必将距离矩阵保存在内存中。相反,可以单独计算每行(或列)的平均值。然后可以从行平均值计算最终平均值。

是否已经存在利用此属性的功能,或者是否有一种简单的方法可以扩展/组合现有功能来做到这一点?

0 投票
0 回答
243 浏览

python - 为什么 CityBlock(Manhattan Distance) 值在 scipy.spatial.distance.pdist 和 sklearn.metric.pairwise_distances 中不同

为了解决一个问题,我需要所有向量之间的曼哈顿距离。我试过sklearn.metrics.pairwise_distances了,但是尺寸太大了,所以为了减少内存占用,我曾经scipy.spatial.distance.pdist得到1D距离的压缩矩阵。

我使用了以下公式:

计算1D矩阵的索引,得到 的距离值ij

我观察到,对于许多条目,距离的形式scipysklearn. 当两个图书馆用于计算城市街区距离的公式相同时,为什么会这样?

0 投票
0 回答
132 浏览

python - 在计算距离矩阵时遇到错误:“RuntimeWarning:sqrt 中遇到无效值”

我随机生成了一个矩阵:mtx=numpy.random.rand(100,3) 然后我尝试使用以下方法将矩阵的维数减少到 2:

之后我想计算 的欧几里得距离矩阵newMTX,然后我做了:

RuntimeWarning: invalid value encountered in sqrt但是我遇到了一个我无法理解原因的错误( )。任何人都可以帮助我吗?

我已经尝试过:

但我遇到了同样的错误。

我搜索并找到了另一种解决方案:

但我不确定计算大矩阵的距离矩阵是否是一种有效的解决方案,例如 1000000*2 矩阵?

我想要实现的是 100*2 矩阵的 100*100 欧式距离矩阵newMTX

任何帮助将不胜感激!

0 投票
0 回答
128 浏览

python - 使用 scipy.spatial.cKDTree 加速最近的邻居

我正在尝试优化我需要为同一数据集的多次迭代计算的最近邻距离代码

我正在计算数据集 A 中的点到数据集 B 中的点的最近邻距离。两个数据集都包含 ~ (1000-2000) 二维点。虽然数据集 A 中的点保持不变,但我对数据集 B (~100000)、B 0、B 1、...B 100000有很多不同的迭代。我想知道如果 A 保持不变,我是否可以以某种方式加快速度相同的。

要计算我使用的最近邻距离

我想知道是否有一种方法可以加快速度,因为A在整个循环中保持不变。在我看来,鉴于 A 是相同的,应该有一种更聪明的方法来做到这一点。

0 投票
0 回答
285 浏览

python - Scipy 树状图中不同的链接颜色意味着什么?

我有以下用 SciPy 制作的树状图:

这给出了以下图片:

在此处输入图像描述

我不太确定如何解释树状图中的颜色。从文档中,它给出了color_threshold参数的以下描述:

为简洁起见,设 t 为 color_threshold。如果 k 是低于切割阈值 t 的第一个节点,则将集群节点 k 下方的所有后代链接着色为相同颜色。连接距离大于或等于阈值的节点的所有链接都显示为蓝色。如果 t 小于或等于 0,则所有节点都为蓝色。如果 color_threshold 为 None 或“默认”,对应于 MATLAB(TM) 行为,则阈值设置为 0.7*max(Z[:,2])。

然而,让我感到困惑的是,为什么一些看起来非常接近的集群没有被赋予不同的颜色,而其他距离更远的集群............

我认为,在其他条件相同的情况下,集群越近,它们就越有可能成为不同的颜色,以表示集群成员资格,但情况似乎并非如此。

0 投票
2 回答
1630 浏览

python-3.x - Python的scipy空间KD树比蛮力欧几里得距离慢?

我已经快速检查了构建树并查询它与仅计算所有欧几里德距离的性能。如果我在这棵树上查询半径内的所有其他点,它不应该大大优于蛮力方法吗?

有谁知道为什么我的测试代码会产生这些不同的结果?我用错了吗?测试用例不适合 kd-trees 吗?

PS:这是我使用的代码的简化概念验证版本。我还存储和转换结果的完整代码可以在这里找到,但它会产生相同的结果。

进口

实现

测试设置

阴谋

绘制结果

0 投票
2 回答
268 浏览

python - Python:两个一维向量之间的scipy/numpy所有对计算

我有两个列表l1l2包含可能具有不同长度的整数,我想在这两个向量之间的每个可能配对之间执行计算。

具体来说,我正在检查每对之间的汉明距离,如果距离足够小,我想“计算”它。

天真地,这可以实现

但这不是很快。

我没有成功尝试利用scipy.spatial.distance.cdist,我认为我将首先计算所有对之间的汉明距离,因为scipy.spatial.cdist 文档指出它将

计算两个输入集合中每对之间的距离。

然后计算满足谓词的元素个数,即汉明距离1 - d >= threshold在哪里d,即

但是各个解决方案找到的匹配数不同。我注意到可以cdist使用函数进行调用,cdist(XA, XB, f)但是我没有成功编写我的实现hamming_distance以使其正确广播。

我已经查看了这个问题/答案,但它假定两个列表的长度相同,这不是这里的情况。

0 投票
0 回答
367 浏览

python-3.x - Scipy vs Matlab:3D 旋转矩阵

我比较了用于创建 3D 旋转矩阵的 scipy 和 MATLAB 函数的输出,这两个程序显示了不同的结果。

第一个 SciPys scipy.spatial.transform.Rotation

现在matlabs eul2rotm函数:

所以最后,应用旋转的顺序似乎不同。但是哪一个是正确的呢?我很感激任何帮助。

使用 SciPy 1.3.1、NumPy 1.15.4 和 Matlab R2018b 进行测试。

0 投票
1 回答
159 浏览

matplotlib - Matplotlib 多边形在多边形之外填充

我有一组多边形,是用scipy.spatial.Voronoi(特别是 Voronoi 区域的一个子集)创建的,我想用 matplotlib 绘制它们。然而,似乎对 matplotlib 多边形的顶点顺序有一些限制,因为一些多边形最终填充在多边形的外部而不是内部。在这些情况下,颠倒指定顶点的顺序似乎可以解决问题,所以在我看来这就像一个缠绕问题(即使文档没有提到这样的事情)。

但是,由于某些多边形的顺序正确,而有些多边形的顺序错误,我不能只反转所有顶点列表,所以有没有办法可以检测到错误缠绕的列表并仅修复那些或另一种方法让 matplotlib 自动做同样的事情?

0 投票
0 回答
251 浏览

python - 为什么 scipy 'cKDTree' 在查找最近点时比 'cdist' 慢?

许多参考资料都告诉我,KDTree 是一种快速查找大数据最近邻居的方法。我当前的问题是为给定的数据 A 在 X 中找到最近的点。详细说明,目前,X 有 1,000,000 个数字数据,A 由 10,000 个组成。我想为 A 中的每个点找到 X 中最近的点。因此,结果应该是 10,000 个指示 X 中的数据点的索引。

当我使用 cdist(来自 scipy.spatial)和 for 循环来查找 A 中每个数据的最近点时,大约需要半小时(1972 秒),而使用 n_jobs 时,cKDTree.query 大约需要 50 分钟(2839 秒) = 4。

cdist 的代码如下:

cKDTree 的代码如下:

  1. 我很好奇这是否正常
  2. 如果 cdist 在通过计算距离来找到最近的邻居时实际上更快,那么在什么情况下应该使用 cKDTree?如果我使用更大的数据集 A,KDTree 会更好吗?
  3. 有没有办法只在查询最近点(k=1)而不计算距离时才找到索引?我的猜测是距离计算会减慢很多(当然这只是一个猜测)