scipy.sparse での行列演算
ところで Python という言語は for 文がもっぱら遅いと評判である.そんなに評判なら,速くすればいいのにと思うのだが,なにか大人の事情があって速くできないのだろう*1.そこで意地になって Cython とかいう反則技のようなものを出してくる人もいるが,ここでは素直に行列演算で速くする方法を考える*2.
普段使う numpy.array では普通の行列積の他に element-wise な掛け算も用意されているので,これを駆使することで大抵の式は行列演算の形で書くことができるのだが, scipy.sparse はなぜか基本的に numpy.matrix のような演算を用いているので, numpy.array ばかり使っていたゆとり*3は,
「行列積しかねーじゃん! element-wise な掛け算が欲しい欲しい欲しい欲しい欲しい欲しい欲しい欲しい欲しい....」
といって発狂してしまい,最終的には Python を捨てて C++ を書き始めてしまいかねない*4.その上計算効率も悪いので,余計な電力も消費してしまい,地球温暖化が促進される.
それを防ぐ方法を以下に記す.
A,Bを同じサイズの numpy.matrix や scipy.sparse だとして,
A.multiply(B)
で element-wise な掛け算ができるので,これで計算効率もあがり,結果として地球温暖化も阻止される*5.