在Matlab中,很自然地大量使用内置的逻辑索引和屏蔽机制。例如,
(1)idx = (A == 2)
创建一个与A
大小相同的逻辑数组,标识所有等于2的元素,并且
(2)假设C = B(idx)
和B
的大小相同,A
会从B
中提取所有相应的元素。
这种机制优雅而且效率极高。无论A
&的维度如何,它都有效。 B
。在Matlab中,使用逻辑掩码比以数字方式提取索引更有效。我刚刚开始学习Python,它以不同的方式完成所有工作。标准Python 3中最接近等同于(1)和(2)的是什么(不安装NumPy等)?
答案 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]