我遇到了一个问题。我有两个二维 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/