python - 两个具有公差的多维数组之间的交集 - NumPy/Python

标签 python numpy

我遇到了一个问题。我有两个二维 numpy 数组,填充了 x 和 y 坐标。这些数组可能看起来像:

array1([[(1.22, 5.64)],
   [(2.31, 7.63)],
   [(4.94, 4.15)]],

array2([[(1.23, 5.63)],
   [(6.31, 10.63)],
   [(2.32, 7.65)]],

现在我必须找到“重复节点”。但是,我还必须在给定的坐标公差范围内将节点视为相等,因此,我不能使用像 this 这样的解决方案。 .由于我的数组非常大(每个大约 200.000 行),所以两个简单的 for 循环也不是一个选项。我的最终输出应该是这样的:

output([[(1.23, 5.63)],
   [(2.32, 7.65)]],

我会很感激一些提示。

干杯,

最佳答案

为了与具有给定公差的节点进行比较,我建议使用 numpy.isclose(),您可以在其中设置相对和绝对公差。

numpy.isclose(1.24, 1.25, atol=1e-1)
# [True]
numpy.isclose([1.24, 2.31], [1.25, 2.32], atol=1e-1)
# [True, True]

您可以使用 itertools.product() 包来遍历所有对,而不是使用两个 for 循环。以下代码可以满足您的需求:

array1 = np.array([[1.22, 5.64],
                   [2.31, 7.63],
                   [4.94, 4.15]])

array2 = np.array([[1.23, 5.63],
                   [6.31, 10.63],
                   [2.32, 7.64]])

output = np.empty((0,2))
for i0, i1 in itertools.product(np.arange(array1.shape[0]),
                                np.arange(array2.shape[0])):
    if np.all(np.isclose(array1[i0], array2[i1], atol=1e-1)):
         output = np.concatenate((output, [array2[i1]]), axis=0)
# output = [[ 1.23  5.63]
#           [ 2.32  7.64]]

关于python - 两个具有公差的多维数组之间的交集 - NumPy/Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49303679/

相关文章:

python - 如何创建一个包含每个项目复选框的组合框?

python - 类型错误 - Python Simpy

python - 更新 django 项目、跟踪更新的最佳方法

python - 使用SciPy接口(interface)和Cython直接调用BLAS/LAPACK

python - numpy中t检验是如何计算的

python - 如何在Python中将数组中的值替换为列表中的值?

python - 使用openCV和numpy进行图像处理。尝试返回没有红色的图像

python - 在 Numpy 中更改对比度

python - 在 Python 中处理 14 位数据

python - 有没有一种方法可以在没有 for 循环的情况下在 numpy 中实现递归?