在看fastai的代碼時(shí),看到這么一段:
n=100
x = torch.ones(n,2)
x[:,0].uniform_(-1.,1)
x[:5]
a = tensor(3.,2)
y = x@a + torch.rand(n)
這里面有個(gè)@符號(hào)不知道是啥意思?
于是百度搜了一下,都是說@xxx是注解或者裝飾器,明顯不是這段代碼的場景嘛!
于是又Google了一下,原來這個(gè)@是Python 3.5之后加入的矩陣乘法運(yùn)算符,終于明白了!
補(bǔ)充:python矩陣乘積運(yùn)算(multiply/maumul/*/@)解析
在訓(xùn)練數(shù)據(jù)時(shí)經(jīng)常涉及到矩陣運(yùn)算,有段時(shí)間沒有練習(xí)過了,手便生疏了。
今天重新測了一把,python中各類矩陣運(yùn)算舉例如下,可以清楚的看到tf.matmul(A,C)=np.dot(A,C)= A@C都屬于叉乘,而tf.multiply(A,C)= A*C=A∙C屬于點(diǎn)乘。

Python測試編碼如下:
import tensorflow as tf
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([5,6])
c = np.array([[5,6],[7,8]])
print('a:'+'\n',a)
print('b:'+'\n',b)
print('c:'+'\n',c)
#叉乘
d1=a@c
d2=tf.matmul(a,c)
d3=np.dot(a,c)
#點(diǎn)乘
f1=a*c
f2=tf.multiply(a,c)
with tf.compat.v1.Session() as sess:
print('d1:叉乘a@c' + '\n', d1)
print('d2:叉乘matmul(a,c)' + '\n', sess.run(d2))
print('d3:叉乘dot(a,c)' + '\n', d3)
print('f1:點(diǎn)乘a*c' + '\n', f1)
print('f2:點(diǎn)乘multiply(a,c)' + '\n', sess.run(f2))
測試結(jié)果如下:

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- 基于Python3中運(yùn)算符 **和*的區(qū)別說明
- Python的運(yùn)算符重載詳解
- Python函數(shù)參數(shù)中的*與**運(yùn)算符
- Python運(yùn)算符+與+=的方法實(shí)例
- python入門教程之基本算術(shù)運(yùn)算符