根据另一个数组的索引和另一个数组的值查找数组的最小值
Finding the minimum value of an array subject to an index of another array and values from another one
我有一个名为 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" 的方式?
我不知道你实际数据的范围,所以我生成了一些随机数据。
from random import randrange
m, n = 100, 200
dist = [[i+j for j in range(n)] for i in range(n)]
part = [randrange(n) for k in range(m)]
inci = [randrange(9) for k in range(m)]
# keep only items in `part` where corresponding `inci` value < 2
part = [p for p,i in zip(part, inci) if i < 2]
# check dist for all couples in `part` and extract minimal value
d = min(dist[pi][pj] for pi in part for pj in part)
此代码仅给出最小距离。如果您还需要达到最小值的索引,最好切换到 numpy
并使用它提供的 argmin
函数。
我有一个名为 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" 的方式?
我不知道你实际数据的范围,所以我生成了一些随机数据。
from random import randrange
m, n = 100, 200
dist = [[i+j for j in range(n)] for i in range(n)]
part = [randrange(n) for k in range(m)]
inci = [randrange(9) for k in range(m)]
# keep only items in `part` where corresponding `inci` value < 2
part = [p for p,i in zip(part, inci) if i < 2]
# check dist for all couples in `part` and extract minimal value
d = min(dist[pi][pj] for pi in part for pj in part)
此代码仅给出最小距离。如果您还需要达到最小值的索引,最好切换到 numpy
并使用它提供的 argmin
函数。