Python 2.7.3 インタープリター セッションからの次のトランスクリプトは、組み込み関数map
を使用して要素ごとの操作を 2D マトリックス要素に適用する方法を示しています。(注:operator.add
はelementwise_function
問題の指定と同等であり、 の 2 番目の使用におけるラムダ式とも同等です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]]