python - 如何有效地检查许多条件并在正确的情况下分配不同的 id?

标签 python numpy

我设置了一些代码,需要检查许多不同的条件,如下所示:

cond = np.zeros_like(matrix1)
ids = np.where(matrix1 == value1)
cond[ids] = 1
ids2 = np.where(matrix2 == value2)
cond[ids2] = 2

...

idsn = np.where(matrixn == valuen)
cond[idsn] = n

我想知道是否有更简单的方法来做到这一点。一般来说,条件之间是没有关联的。我应该提到的是,某些矩阵可能会被重复使用(即条件 5 正在检查矩阵 2 中的某些内容),并且某些条件可能比“矩阵等于数字”更复杂。我正在寻找类似的东西:

for j, condition in enumerate(condition_list):
    ids = np.where(condition)
    cond[ids] = j

最佳答案

为了保持整洁,您可以创建一个条件字典。

def eval_equal(a, b):
    return a == b

def eval_different(a, b):
    return a != b

def eval_combination(a, b):
    eval_equal(a, b) and eval_different(a, b)

evaluator = {}
evaluator['cond1'] = eval_equal
evaluator['cond2'] = eval_different
evaluator['cond3'] = eval_combination

my_matrix = [[1, 2, 3], [1, 2, 3]]
vector = [1, 2, 3]
conds = []
for cond, eval_func in evaluator.items():
    if eval_func(my_matrix, vector):
        conds.append(cond)

print(conds)

然后,正如 @pzp 所说,您可以创建一个要评估的对象列表,并将它们提供给字典,该字典将遍历所有条件。此外,它还允许您组合简单的条件(或更复杂的条件,如 a > 10 + b),因为它们都是函数。

关于python - 如何有效地检查许多条件并在正确的情况下分配不同的 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30014144/

相关文章:

python - 使用 optimize.root 求解迭代定义的方程

python - 如何在 OpenCV 中将 16 位图像转换为 8 位图像?

python - 如何实现单热编码的生成器函数

python - f 字符串表达式中出现类型错误 - 'str' 对象不可调用

python - BeautifulSoup 在 Django 中没有得到任何输出

python - 在Python中,为什么 "' a'和 'b'和 'c'“是 'c',而 "' a'或 'b'或 'c'”是 'a'?

python - numpy.linalg.pinv 的 rcond 参数有什么作用?

python - 使用另一个数组和索引数组创建 numpy 数组

python - python中的滑动窗口改变形状

python - 如何通过 Python 中单个字典的键对一堆列表进行分组