torch.geqrf(input, out=None) -> (Tensor, Tensor)这是一个直接调用LAPACK的底层函数。一般使用torch.qr()计算输入的QR分解,但是并不会分别创建Q,R两个矩阵,而是直接调用LAPACK函数。
参数:
--input (Tensor):输入矩阵
--out (tuple, optional):元组,包含输出张量 (Tensor, Tensor)
import torch
input=torch.Tensor([[0,0,1],
[0,1,0],
[1,0,0]])
a=torch.geqrf(input)
print(a)
torch.return_types.geqrf(
a=tensor([[-1., 0., 0.],
[ 0., 1., 0.],
[ 1., 0., -1.]]),
tau=tensor([1., 0., 0.]))
torch
.
ger(vec1, vec2, out
=
None
)
-->
Tensor计算两个向量vec1,vec2的张量积。如果vec1的长度为n,vec2长度为m,则输出out应为形如nxm的矩阵。
参数:
--vec1 (Tensor)
:
1D
输入向量
--vec2 (Tensor)
:
1D
输入向量
--out (tuple, optional)
:输出张量
例子:
>>> v1 = torch.arange(1, 5)
>>> v2 = torch.arange(1, 4)
>>> torch.ger(v1, v2)
1 2 3
2 4 6
3 6 9
4 8 12
[torch.FloatTensor of size 4x3]
torch
.
gesv(B, A, out
=
None
)
->
(Tensor, Tensor)X,LU=torch.gesv(B,A)
, 返回线性方程组
AX=B
的解。
LU包含两个矩阵L,U。A须为非奇异方阵,如果A是一个mxm矩阵,B是mxk矩阵,则LU是mxm矩阵,X为mxk矩阵。
参数:
--B (Tensor):
m
×
k 矩阵
--
A (Tensor)
:
m
×
m
矩阵
--out (Tensor, optional)
:可选地输出矩阵
X
例子:
>>> A = torch.Tensor([[6.80, -2.11, 5.66, 5.97, 8.23],
... [-6.05, -3.30, 5.36, -4.44, 1.08],
... [-0.45, 2.58, -2.70, 0.27, 9.04],
... [8.32, 2.71, 4.35, -7.17, 2.14],
... [-9.67, -5.14, -7.26, 6.08,
-6.87]]).t() , →
>>> B = torch.Tensor([[4.02, 6.19, -8.22, -7.57, -3.03],
... [-1.56, 4.00, -8.67, 1.75, 2.86],
... [9.81, -4.09, -4.57, -8.61,
8.99]]).t() , →
>>> X, LU = torch.gesv(B, A)
>>> torch.dist(B, torch.mm(A, X))
9.250057093890353e-06
torch
.
inverse(
input
, out
=
None
)
-->
Tensor :对方阵输入input取逆。注意:Irrespective of the original strides, the returned matrix will be transposed, i.ewith strides (1, m) instead of (m, 1)
参数:
--input (Tensor)
:输入
2
维张量
--out (Tensor, optional)
:输出张量
例子:
x = torch.rand(3,3)
y = torch.inverse(x) x
tensor([[0.2118, 0.0633, 0.1377],
[0.9734, 0.0831, 0.6557],
[0.4508, 0.5611, 0.1341]])
y
tensor([[-72.4581, 13.9640, 6.1119],
[ 33.5259, -6.8370, -0.9899],
[103.3160, -18.3383, -8.9477]])
z = torch.mm(x,y)
tensor([[ 1.0000e+00, -1.3698e-07, -8.9408e-08],
[ 5.8442e-06, 1.0000e+00, -5.7722e-07],
[-1.8157e-07, 7.7508e-08, 1.0000e+00]])
torch
.
mm(mat1, mat2, out
=
None
)
-->
Tensor:对矩阵mat1和mat2进行相乘。如果mat1是一个nxm张量,mat2是一个mxp张量,将会输出一个nxp张量out。
参数:
--mat1(Tensor)
:第一个相乘矩阵
--mat2 (Tensor)
:第二个相乘矩阵
--out (Tensor, optional):输出张量
例子:
>>> mat1 = torch.randn(2, 3)
>>> mat2 = torch.randn(3, 3)
>>> torch.mm(mat1, mat2)
0.0519 -0.3304 1.2232
4.3910 -5.1498 2.7571
[torch.FloatTensor of size 2x3]
torch
.
mv(mat, vec, out
=
None
)
-->
Tensor:对矩阵mat和向量vec进行相乘。如果mat是一个nxm张量,vec是一个m元1维张量,将会输出一个n元1维张量。
参数:
--mat (Tensor)
:相乘矩阵
--vec (Tensor)
:相乘向量
--out (Tensor, optional):输出张量
例子:
>>> mat = torch.randn(2, 3)
>>> vec = torch.randn(3)
>>> torch.mv(mat, vec)
-2.0939
-2.2950
[torch.FloatTensor of size 2]
• torch.orgqr
• torch.orgqr()
• torch.ormqr
• torch.ormqr()
• torch.potrf
• torch.potrf()
• torch.potri
• torch.potri()
• torch.potrs
• torch.potrs()
• torch.pstrf
• torch.pstrf()
torch
.
qr(
input
, out
=
None
)
->
(Tensor, Tensor)
:计算输入矩阵的QR分解:返回两个矩阵q,r,使得x=q*r,这里q是一个半正交矩阵与r是一个上三角矩阵本函数返回一个thin(reduced)QR分解。
如果输入很大,可能可能会丢失精度。本函数依赖于你的LAPACK实现,虽然总能返回一个合法的分解,但不同平台可能得到不同的结果。
Irrespective of the original strides, the returned matrix q will be transposed, i.e. with strides (1, m) instead of (m, 1).
参数:
--input (Tensor):输入的
2
维张量
out (tuple, optional)
:输出元组
tuple
,包含
Q和R
例子:
>>> a = torch.Tensor([[12, -51, 4], [6, 167, -68], [-4, 24,
-41]]) , →
>>> q, r = torch.qr(a)
>>> q
-0.8571 0.3943 0.3314
-0.4286 -0.9029 -0.0343
0.2857 -0.1714 0.9429
[torch.FloatTensor of size 3x3]
>>> r
-14.0000 -21.0000 14.0000
0.0000 -175.0000 70.0000
0.0000 0.0000 -35.0000
[torch.FloatTensor of size 3x3]
>>> torch.mm(q, r).round()
12 -51 4
6 167 -68
-4 24 -41
[torch.FloatTensor of size 3x3]
>>> torch.mm(q.t(), q).round()
1 -0 0
-0 1 0
0 0 1
[torch.FloatTensor of size 3x3]