【发布时间】:2018-08-29 19:02:25
【问题描述】:
我有一个名为 dist 的特定大小 n x n 的方形数组,一个名为 particion 的大小为 m<n 的向量,其索引从 0 到 n,另一个名为 incidencia 的大小m。一切都使用 NumPy 存储。
我想找到的是dist 的最小值,它符合两个条件并将参数作为向量捕获。这是从 C++ 翻译成 python 的粗略代码:
num = len(particion)
a = [100] * 2
mini = dist_max
for i in range(num):
pi = particion[i]
for j in range(num):
pj = particion[j]
if (dist[pi,pj] <= mini) & ((incidencia[i] < 2) & (incidencia[j] < 2)):
mini = dist[pi][pj]
a[0] = i
a[1] = j
我觉得这不是找到最小值的最佳方法,因为这个函数需要太多时间来计算,即使在 C++ 中也是如此。有没有更好的办法?更“python-eske”的方式?
【问题讨论】:
-
你能用 NumPy 吗?
-
这将是堆排序的完美用例。在 O(nlogn) 中排序,在 O(1) 中提取 min
-
是的@rayryeng,我可以使用 NumPy,实际上数组是使用 NumPy 存储的。
-
我将如何使用堆排序 @rpg711 ?