以下来自 python 2.7.3 解释器会话的记录说明了使用内置函数map
将元素操作应用于 2D 矩阵元素。(注:operator.add
等同于elementwise_function
指定的问题,也等同于第二次使用中的lambda表达式applier
。)
>>> import operator
>>> def applier(a, b, op):
... return map(lambda ro: map(op, ro[0], ro[1]), zip(a,b))
...
>>> applier(x, y, operator.add)
[[5, 5, 2], [5, 4, 5], [6, 5, 5]]
>>> x; y
[[2, 2, 1], [2, 2, 2], [3, 2, 2]]
[[3, 3, 1], [3, 2, 3], [3, 3, 3]]
>>> applier(x, y, lambda p,q: p+q)
[[5, 5, 2], [5, 4, 5], [6, 5, 5]]
>>> applier(x, y, lambda p,q: p-q)
[[-1, -1, 0], [-1, 0, -1], [0, -1, -1]]
>>> applier(x, y, lambda p,q: p*q)
[[6, 6, 1], [6, 4, 6], [9, 6, 6]]
注意,上面有x,y如下:
x=[[2, 2, 1], [2, 2, 2], [3, 2, 2]]
y=[[3, 3, 1], [3, 2, 3], [3, 3, 3]]
如前所述,上面的文字记录来自 python 2.7.3 解释器会话。如果此代码在 python 3 中运行,它将改为返回地图对象。可以使用如下函数来查看数字:
def itemize(m):
return [itemize(e) for e in m] if hasattr(m, '__iter__') else m
有了这个功能,声明
itemize(applier(x, y, operator.add))
返回
[[5, 5, 2], [5, 4, 5], [6, 5, 5]]