気付いてなかったわけじゃないんだけど Python 3.5.0 のはなし

最初に言っときますが、マイクロバージョンがゼロのものに手を出すのは、物好きというか新し物好きだけにしたほうがいいよ。

ドキュメントの翻訳とかもまだ当面先になります、3.5.0 は。慌てて手を出すもんではない。

Python 3.5.0 の話と、Cython 0.23.4 を、知ってて黙ってた。Cython 0.23 系も 0.22 からの差異が比較的大きいので、まだちょろちょろとゴタゴタしとります。

なんだけど、TwitterPocketときて、これも久しぶりに Google+ を開いてみて、そこではやはり Python 関係ばかりをフォローしてるんだけど、これのコメントみて気になっちゃってさ。「The new matrix operations are cool!」。

ん? ん?

PEP465

全部読んではいないけど、「@演算子」で行列のドット積、らしい。えーっと、numpy なくてもドット積計算出来るようになるのかな? それとも ___matmul__ , ___rmatmul__ だけが使えるようになって、numpy がその実装を提供する、ってことかな?

全部読んでないからちょっとどっちかわからないんだけど、とにかくもとのこんな:

1 import numpy as np
2 from numpy.linalg import inv, solve
3 
4 S = (H.dot(beta) - r).T.dot(inv(H.dot(V).dot(H.T))).dot(H.dot(beta) - r)

これを

1 import numpy as np
2 from numpy.linalg import inv, solve
3 
4 S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)

と書けちゃえるようにするぜ、てこと。うひょ。こりゃ読みやすい。あぁ、「・」に似てるのを選んだてのもあるのかも。

まぁ、かなりの numpy ユーザが待ち望んでいたんではないか、とは思うね。

なお、numpy の同一 shape の ndarray どうしの「*」は、いわゆる「アダマール積(Hadamard product)」、一方がスカラーの場合はブロードキャスト演算です。「内積」のつもりで使うと全然別:

 1 >>> import numpy as np
 2 >>> a = np.arange(16).reshape((4,4))
 3 >>> b = (16 - np.arange(16).reshape((4,4)))
 4 >>> a
 5 array([[ 0,  1,  2,  3],
 6        [ 4,  5,  6,  7],
 7        [ 8,  9, 10, 11],
 8        [12, 13, 14, 15]])
 9 >>> b
10 array([[16, 15, 14, 13],
11        [12, 11, 10,  9],
12        [ 8,  7,  6,  5],
13        [ 4,  3,  2,  1]])
14 >>> a * b
15 array([[ 0, 15, 28, 39],
16        [48, 55, 60, 63],
17        [64, 63, 60, 55],
18        [48, 39, 28, 15]])
19 >>> a * 3
20 array([[ 0,  3,  6,  9],
21        [12, 15, 18, 21],
22        [24, 27, 30, 33],
23        [36, 39, 42, 45]])
24 >>> a * [3, 2]
25 Traceback (most recent call last):
26   File "<stdin>", line 1, in <module>
27 ValueError: operands could not be broadcast together with shapes (4,4) (2,)

リンク先の PEP でも当然このことに真っ先に触れてる。numpy の今のこの「*」はそのままに、ドット積の方を「@」にする、てことよ。

ちょいと自分で毒見してみる気はあまりないんで、ほんとに PEP を斜め読みしただけの理解。ので間違ってたらごめんなさい。(長いので 1% も読んでない。)

2016-01-23 追記:
3.5.1 が 2015 年 12 月 7 日にリリースされてるのと、3.5.x のドキュメント翻訳が、昨年末 (確か 30 日か 31 日)に開始されてます。

てか、ドキュメント翻訳、手伝ってみたりしない?