我设置了一些代码,需要检查许多不同的条件,如下所示:
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/