【发布时间】:2013-09-27 16:19:19
【问题描述】:
我正在实现一个简单的代码,它计算list_A 中的点(x_a, y_a) 和list_B 中的所有点(x_b, y_b) 之间的距离,并返回找到的最小距离。对list_A 中的所有点重复此操作。
我的代码的MWE:
# list_A points defined in array.
list_A = np.array([
[x_data_a, # x
y_data_a] # y
], dtype=float)
# list_B points defined in list.
list_B = [[x_data_b], [y_data_b]]
# Iterate through all data points in list_A
for ind, x_a in enumerate(list_A[0][0]):
y_a = list_A[0][1][ind]
# Iterate through all points in list_B.
dist_min = 1000.
for ind2, x_b in enumerate(list_B[0]):
y_b = list_B[1][ind2]
# Find distance between points.
dist = (x_a-x_b)**2 + (y_a-y_b)**2
if dist < dist_min:
# Update value of min distance.
dist_min = dist
print 'Min dist to (', x_a, y_a, '): ', dist_min
数据格式如下:
list_A = [[[1.2 2.3 1.5 2.3 5.8 4.6 9.1] [2.5 1.0 4.6 2.4 7.4 1.1 3.2]]]
list_B = [[1.4, 5.8, 7.9], [6.1, 1.2, 3.7]]
对于大型列表/数组,这可能需要相当长的时间才能完成。可以加快速度吗?
【问题讨论】:
-
根据您对某些答案的 cmets,我意识到我不了解您的数据格式。你是说
x_data_a本身就是一个点序列吗?您能否提供一个包含文字数值的数据结构的简单示例? -
请查看已编辑的问题。我认为使用
zip可能会成功,因为我收到了ValueError: XA and XB must have the same number of columns (i.e. feature dimension.)错误。 -
你的例子仍然没有意义。我在那里看不到任何要点,只是个别数字的列表。你不能在你的个人点内有
...,因为那样你就不会知道这些点的尺寸,也无法找到它们之间的距离。请提供一个没有...的小文字示例。 -
抱歉,
...要缩短列表的位置。我已经更新了 que question,显示了一组真实数据的样子。无论如何,我很确定使用zip(*)是解决我上面提到的错误的方法。 -
是的,您的数组格式错误,您可以使用
zip(*list_A)将它们转换为正确的格式。
标签: python performance algorithm numpy distance