ValueError: negative dimensions are not allowed

サイズの大きく、かつ、スパースなndarrayを操作すると発生する模様。
参考:http://stackoverflow.com/questions/12113498/valueerror-when-take-the-dot-product-of-two-sparse-matrices-in-scipy

スパースってのは直訳で”疎な”とか”まばらな”とか。
機械学習界隈では要素がほとんど0以外の値をとらないベクトルとか、SVM最適化のように係数がほとんど0になる様子を指して、スパースですね。って言ったりする。

当初はエラーメッセージから推察してインデックス指定のバグかと勘違いしてた。
Numpyの内部処理を理解している訳ではないので確定的なことは言えないのだけれど、0に値をとる要素が多いndarrayを操作する際には注意しなさいよってこと。

今回は実験プログラムの実装上、どうしてもスパースな行列を操作する必要があって、かつその値は0に近似できれば十分だった。
対応策としてnumpy.floatで表現できる最小値を代入して、擬似的にスパースではないように見せかけて回避した。