最初に言っときますが、マイクロバージョンがゼロのものに手を出すのは、物好きというか新し物好きだけにしたほうがいいよ。
ドキュメントの翻訳とかもまだ当面先になります、3.5.0 は。慌てて手を出すもんではない。
Python 3.5.0 の話と、Cython 0.23.4 を、知ってて黙ってた。Cython 0.23 系も 0.22 からの差異が比較的大きいので、まだちょろちょろとゴタゴタしとります。
なんだけど、Twitter、Pocketときて、これも久しぶりに Google+ を開いてみて、そこではやはり Python 関係ばかりをフォローしてるんだけど、これのコメントみて気になっちゃってさ。「The new matrix operations are cool!」。
ん? ん?
全部読んではいないけど、「@演算子」で行列のドット積、らしい。えーっと、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 日)に開始されてます。
てか、ドキュメント翻訳、手伝ってみたりしない?