在看fastai的代码时,看到这么一段:
1
2
3
4
5
6
|
n = 100
x = torch.ones(n, 2 )
x[:, 0 ].uniform_( - 1. , 1 )
x[: 5 ]
a = tensor( 3. , 2 )
y = x@a + torch.rand(n)
|
这里面有个@符号不知道是啥意思?
于是百度搜了一下,都是说@xxx是注解或者装饰器,明显不是这段代码的场景嘛!
于是又Google了一下,原来这个@是Python 3.5之后加入的矩阵乘法运算符,终于明白了!
补充:python矩阵乘积运算(multiply/maumul/*/@)解析
在训练数据时经常涉及到矩阵运算,有段时间没有练习过了,手便生疏了。
今天重新测了一把,python中各类矩阵运算举例如下,可以清楚的看到tf.matmul(A,C)=np.dot(A,C)= A@C都属于叉乘,而tf.multiply(A,C)= A*C=A∙C属于点乘。
Python测试编码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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)
#点乘
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:点乘a*c' + '\n' , f1)
print ( 'f2:点乘multiply(a,c)' + '\n' , sess.run(f2))
|
测试结果如下:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Derek_Zhang_/article/details/103778418