Python中的逻辑掩码

时间:2018-01-11 08:53:57

标签: python masking

在Matlab中,很自然地大量使用内置的逻辑索引和屏蔽机制。例如, (1)idx = (A == 2)创建一个与A大小相同的逻辑数组,标识所有等于2的元素,并且 (2)假设C = B(idx)B的大小相同,A会从B中提取所有相应的元素。

这种机制优雅而且效率极高。无论A&的维度如何,它都有效。 B。在Matlab中,使用逻辑掩码比以数字方式提取索引更有效。我刚刚开始学习Python,它以不同的方式完成所有工作。标准Python 3中最接近等同于(1)和(2)的是什么(不安装NumPy等)?

1 个答案:

答案 0 :(得分:0)

这将函数应用于集合的所有元素。执行此操作的内置方法是map和理解(map(lambda x: x==2, A)[x==2 for x in A])。如果要将函数应用于随机嵌套列表,则必须执行map的扩展。

def is_two(x):  # more readable than the lambda
    return x == 2

def map_nested(fnc, lst):
    if not isinstance(lst, list):
        return fnc(lst)
    return [map_nested(fnc, x) for x in lst]

A = [[1,2,3], [2,3,4], 1, 2]
map_nested(is_two, A)
#[[False, True, False], [True, False, False], False, True]