如何使用 Python 获取数组中某些元素的最小值?
How do I get the minimum of certain elements of an array with Python?
我需要知道迭代数组中某些元素的数据的最小元素。
我有三个数组 dist、Q 和顶点:
dist = [ 0. inf inf inf inf]
vertex = [2 4 5 7 8]
Q = [2 4 5 7 8]
dist 数组是顶点值。每次迭代 Q 减小并且 dist 具有不同的值。例如:
第一次迭代:
dist = [ 0. inf inf inf inf]
vertex = [2 4 5 7 8]
Q = [2 4 5 7 8]
第二次迭代:
dist = [ 0. 4. 2. 2. 1.]
vertex = [2 4 5 7 8]
Q = [4 5 7 8]
第三次迭代
dist = [ 0. 4. 2. 2. 1.]
vertex = [2 4 5 7 8]
Q = [4 5 7]
想法是找到 dist 的最小值,但仅在 vertex[ 中的 Q 的可用值中=44=]。在第一次迭代中,最小值是 0,因为它们都在 Q 中。在第二次迭代中最小值 1,也就是说 vertex 中的 8,因为在 Q 中没有值为 0 的 4 距离.
这是 Dijkstra 算法的一部分,它在其中找到 Q 的最小值。在伪代码中它将是:
u ← vertex in Q with min dist[u] // Node with the least distance
我只是在使用 Numpy 库。
目前我的解决方案:
min = np.inf
u = 0
for q in Q:
if dist[self.vertex == q] <= min:
min = dist[self.vertex == q]
u = q
小技巧:如果顶点不在Q
中则添加∞:
>>> dist = [ 0., 4., 2., 2., 1.]
>>> vertex = [2, 4, 5, 7, 8]
>>> Q = [4, 5, 7]
>>> vertex_mask = np.array([0 if x in Q else float('inf') for x in vertex])
>>> np.min(vertex_mask+dist)
2.0
我需要知道迭代数组中某些元素的数据的最小元素。
我有三个数组 dist、Q 和顶点:
dist = [ 0. inf inf inf inf]
vertex = [2 4 5 7 8]
Q = [2 4 5 7 8]
dist 数组是顶点值。每次迭代 Q 减小并且 dist 具有不同的值。例如:
第一次迭代:
dist = [ 0. inf inf inf inf]
vertex = [2 4 5 7 8]
Q = [2 4 5 7 8]
第二次迭代:
dist = [ 0. 4. 2. 2. 1.]
vertex = [2 4 5 7 8]
Q = [4 5 7 8]
第三次迭代
dist = [ 0. 4. 2. 2. 1.]
vertex = [2 4 5 7 8]
Q = [4 5 7]
想法是找到 dist 的最小值,但仅在 vertex[ 中的 Q 的可用值中=44=]。在第一次迭代中,最小值是 0,因为它们都在 Q 中。在第二次迭代中最小值 1,也就是说 vertex 中的 8,因为在 Q 中没有值为 0 的 4 距离.
这是 Dijkstra 算法的一部分,它在其中找到 Q 的最小值。在伪代码中它将是:
u ← vertex in Q with min dist[u] // Node with the least distance
我只是在使用 Numpy 库。
目前我的解决方案:
min = np.inf
u = 0
for q in Q:
if dist[self.vertex == q] <= min:
min = dist[self.vertex == q]
u = q
小技巧:如果顶点不在Q
中则添加∞:
>>> dist = [ 0., 4., 2., 2., 1.]
>>> vertex = [2, 4, 5, 7, 8]
>>> Q = [4, 5, 7]
>>> vertex_mask = np.array([0 if x in Q else float('inf') for x in vertex])
>>> np.min(vertex_mask+dist)
2.0