行ごと、列ごとに一括で加減乗除する方法をずっと探していた。
こう書くとなんじゃそりゃと思われるかもしれないが、n行m列の行列に対してn次元の縦ベクトルを持ってきて、まとめて計算する感じ。
ずっとやり方がわからなかったのだが、このほど試してみたらなんと普通に書けた。
>>> import numpy as np >>> a = np.array([[1,2,3],[1,2,3]]) >>> a/np.array([1,2,3]) array([[ 1., 1., 1.], [ 1., 1., 1.]])
え、マジか・・・
他にも色々試してみる。
>>> a+np.array([1,1,1]) array([[2, 3, 4], [2, 3, 4]]) >>> b*np.array([[1],[0.5]]) array([[ 1., 2., 3.], [ 1., 2., 3.]])
ちなみに、変な次元数で指定すると、
>>> a/np.array([1,2]) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: operands could not be broadcast together with shapes (2,3) (2,)
こんなエラーが吐かれる。そうか、これがbroadcastの力なのか・・・
そんなことも知らないでnumpy使ってたのかよとか言われそうだけど、ちょっと感動した。