2017-08-01 3 views
1

この回答は正しいですか:https://stackoverflow.com/a/39662710/1175080実際にドットプロダクトを計算するためにPythonに@演算子がありますか?

その回答を引用してください。 Pythonの3.5で

あなたは はそれがない代わりに= numpy.dot(A、B)

のB @ = Aを書き込むことができますので、内積のための新しい演算子は、そこにあります私にとってはうまくいかないようです。

$ python3 
Python 3.6.1 (default, Apr 4 2017, 09:40:21) 
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a = [1, 2, 3] 
>>> b = [4, 5, 6] 
>>> a @ b 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for @: 'list' and 'list' 
>>> 

しかし、リンクされた回答には6つのアップフォートがありましたので、私は何か不足しているはずです。ドットプロダクトを計算するために@演算子を使用する方法を示す完全な例を提供できますか?

+1

エラーは問題がある正確に何を説明します:@のための 'サポートされていないオペランドのタイプ(S):「リスト」と「リスト」をなぜなら、それはリスト*のために実装されていないからです。 * numpy配列*のために実装されています。 –

答えて

4

what's new in Python 3.5, section matrix mult (PEP 465)を参照してください:

PEP 465は、行列の乗算のための@中置演算子を追加します。 現在、組み込みのPython型ではnew演算子を実装していませんが、通常、反映、インプレース行列乗算では__matmul__(),__rmatmul__()__imatmul__()と定義することで実装できます。これらのメソッドのセマンティクスは、他の中置算術演算子を定義するメソッドのセマンティクスに似ています。

したがって、これらの方法を自分で実装する必要があります。

あるいは、すでにnew演算子をサポートしていnumpy>=1.10使用:

>>> import numpy 
>>> x = numpy.ones(3) 
>>> m = numpy.eye(3) 
>>> x @ m 
array([ 1., 1., 1.]) 
関連する問題