静かなる名辞

pythonとプログラミングのこと


【python】numpyで行ごと・列ごとに計算

 行ごと、列ごとに一括で加減乗除する方法をずっと探していた。

 こう書くとなんじゃそりゃと思われるかもしれないが、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使ってたのかよとか言われそうだけど、ちょっと感動した。