根据另一个数组的索引和另一个数组的值查找数组的最小值

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,索引从 0n,另一个名为 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 函数。