其他分享
首页 > 其他分享> > 线性代数。

线性代数。

作者:互联网

目录

 深拷贝clone(),浅拷贝detach()方法

矩阵求和

降维求和

A.sum()

A.sum(axis=0)       //按行降维,即按行求和A.sum(axis=1)       //按列

 平均值

mean()

 非降维求和

numpy.cumsum(a, axis=None, dtype=None, out=None)

 矩阵相乘

矩阵相乘torch.mm(), torch.bmm()

 哈达玛积:矩阵点积torch.mul(a, b)

向量点积 torch.dot(a, b),结果是个数

 向量*矩阵torch.mv(A, x)



 深拷贝clone(),浅拷贝detach()方法

import torch

A=torch.tensor([[1,2,3],[2,2,2],[3,3,3]])
print(A)
B=A.clone()        # 通过分配新内存,将A的一个副本分配给
print(B)
print(A+B)
print(A*B) 

detach()方法  得到一个和源张量共享内存,但没有梯度信息张量,不参与计算图的梯度计算

clone()方法    开辟新内存空间,其值和源张量一样,参与计算图中梯度计算并可将梯度信息传递到源张量进行累积,但通过clone方法得到的张量其只是一个中间值,梯度为None

(2条消息) pytorch中detach()和clone()的区别_九袋面的博客-CSDN博客

import torch

a = torch.tensor(2.0, requires_grad=True)
b = a.clone()  # 参与计算图梯度计算,但是和a不是同一内存,改变b值不影响a值,b=2
c = a.detach()  # 不参与计算图的计算,和a是同一内存引用,改变c值影响a值,c=2
c += 1.0     #c=a=3
b = b ** 2 + 3 * b  #b=4+6=10

print(a)  
print(b)  # b单独开辟空间,b=10.,同时引入计算图:
#    b= b**2+3*b  = (a_clone)** 2+ 3*(a_clone) (这里b是对值为2.的tensor a 的拷贝)
print(c)  # c=3.

 两个矩阵的按元素乘法称为哈达玛积

print(A*B)

 标量*矩阵

print(A*2)

矩阵求和

降维求和

A.sum()

等价于

A.sum(axis=[0, 1])

可计算

       表示长度为dd的向量中元素的总和

任意形状张量的元素和 

 将A降成了一个标量

A.sum(axis=0)       //按行降维,即按行求和
A.sum(axis=1)       //按列

 

 c=A.sum(axis=0) 

print(c.shape)          #看维度变化

 平均值

mean()

A.sum() / A.numel()

print(A.float().mean())
print(A.sum()/A.numel())

 非降维求和

numpy.cumsum(a, axis=None, dtype=None, out=None)

1)np.cumsum()  //当成一维数组求和

>>> a = np.array([[1,2,3], [4,5,6]])

>>> a

 array([[1, 2, 3],

          [4, 5, 6]])

>>> np.cumsum(a)

    array([ 1,  3,  6, 10, 15, 21])
#1,1+2,1+1+2,1+1+2+3,....

2)np.cumsum(axis=0)  //按行求和,实际竖着依次累加

>>> np.cumsum(a,axis=0)

array([[1, 2, 3],

       [5, 7, 9]])  
#1,2,3
#1+4,2+5,3+6

3)np.cumsum(a,axis=1) //列,实际行

array([[ 1,  3,  6],

       [ 4,  9, 15]])
#1,1=2,1+2+3
#4,4+5,4+5+6

 4)np.cumsum(a, dtype=float) #指定输出类型

Numpy.cumsum() 用法 ( np.cumsum) - 简书 (jianshu.com)

 矩阵相乘

矩阵相乘torch.mm(), torch.bmm()

torch.mm()实现两个矩阵相乘

torch.bmm()可实现批量矩阵相乘,强制规定维度和大小相同

与线性代数中乘法计算一致

import torch
A=torch.tensor([[1,2,3],[2,2,2],[3,3,3]])
print(A)
b=torch.tensor([[1,2],[2,1],[1,1]])
print(b)
print(torch.mm(A,b))

 哈达玛积:矩阵点积torch.mul(a, b)

矩阵a和b对应位相乘,a的一行一列与b的一行一列相成

a和b的维度必须相等,比如a的维度是(1, 2),b的维度是(1, 2),返回的仍是(1, 2)的矩阵;

c=torch.tensor([[1,2],[1,1],[2,1]])
print(c)
print(torch.mul(b,c))

向量点积 torch.dot(a, b),结果是个数

a(x1,y1)  b(x2,y2)

ab=x1*x2+y1*y2

EG:

x(1,2)

y(2,3)

xy=1*2+2*3=8

x=torch.tensor([1,2])   #1D向量括号里一对【】
y=torch.tensor([2,3])
print(torch.dot(x,y))

 向量*矩阵torch.mv(A, x)

参数必为矩阵、向量

类似torch.mm()


print(x)
print(torch.mv(c,x))

 

标签:sum,torch,矩阵,线性代数,print,cumsum,axis
来源: https://blog.csdn.net/ngc2244/article/details/120422188