Что такое символ '@ = ' в Python?



Я знаю @ для декораторов, но что такое @= Для в Python? Это просто резервация для какой-то будущей идеи?



Это только один из моих многих вопросов во время чтения tokenizer.py.

684   3  

3 ответов:

С theдокументация:

The @ (at) оператор предназначен для использования для умножения матрицы. Никакие встроенные типы Python не реализуют этот оператор.

The @ оператор был введен в Python 3.5. @= умножение матрицы с последующим назначением, как и следовало ожидать. Они сопоставляются с __matmul__,__rmatmul__ или __imatmul__ как + и += карта __add__,__radd__ или __iadd__.

оператор и обоснование этого подробно обсуждаются в PEP 465.

@= и @ вводятся ли новые операторы в Python 3.5 выполняя умножение матриц. Они предназначены для прояснения путаницы, которая существовала до сих пор с оператором * который использовался либо для поэлементного умножения, либо для матричного умножения в зависимости от соглашения, используемого в этой конкретной библиотеке/коде. В результате, в будущем, оператор * предназначен для использования только для поэлементного умножения.

как поясняется в PEP0465, были введены два оператора:

  • новый бинарный оператор A @ B, используется так же, как A * B
  • версия на месте A @= B, используется так же, как A *= B

умножение матрицы против поэлементного умножения

быстро выделить разницу, для двух матриц:

A = [[1, 2],    B = [[11, 12],
     [3, 4]]         [13, 14]]
  • поэлементное умножение будет выход:

    A * B = [[1 * 11,   2 * 12], 
             [3 * 13,   4 * 14]]
    
  • умножение матрицы даст:

    A @ B  =  [[1 * 11 + 2 * 13,   1 * 12 + 2 * 14],
               [3 * 11 + 4 * 13,   3 * 12 + 4 * 14]]
    

использование в Numpy

до сих пор Numpy использовал следующее соглашение:

введение @ оператор делает код, включающий матричные умножения, намного проще для чтения. PEP0465 дает нам пример:

# Current implementation of matrix multiplications using dot function
S = np.dot((np.dot(H, beta) - r).T,
            np.dot(inv(np.dot(np.dot(H, V), H.T)), np.dot(H, beta) - r))

# Current implementation of matrix multiplications using dot method
S = (H.dot(beta) - r).T.dot(inv(H.dot(V).dot(H.T))).dot(H.dot(beta) - r)

# Using the @ operator instead
S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)

очевидно, что последняя реализация намного легче читать и интерпретировать как уравнение.

@ - это новый оператор для умножения матриц, добавленный в Python3. 5

Ссылка:https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465

пример

C = A @ B

Comments

    Ничего не найдено.