Skip to content

Commit 1456677

Browse files
authored
polish linalg doc and add triangular_solve doc (#4073)
1 parent 578d943 commit 1456677

File tree

10 files changed

+105
-39
lines changed

10 files changed

+105
-39
lines changed

docs/api/paddle/Overview_cn.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ tensor数学操作
6161
" :ref:`paddle.greater_equal <cn_api_tensor_cn_greater_equal>` ", "逐元素地返回 x>=y 的逻辑值"
6262
" :ref:`paddle.greater_than <cn_api_tensor_cn_greater_than>` ", "逐元素地返回 x>y 的逻辑值"
6363
" :ref:`paddle.increment <cn_api_tensor_increment>` ", "在控制流程中用来让 x 的数值增加 value"
64-
" :ref:`paddle.inverse <cn_api_tensor_inverse>` ", "计算方阵的逆"
6564
" :ref:`paddle.kron <cn_api_paddle_tensor_kron>` ", "计算两个张量的克罗内克积"
6665
" :ref:`paddle.less_equal <cn_api_tensor_cn_less_equal>` ", "逐元素地返回 x<=y 的逻辑值"
6766
" :ref:`paddle.less_than <cn_api_tensor_cn_less_than>` ", "逐元素地返回 x<y 的逻辑值"
@@ -236,20 +235,16 @@ tensor线性代数相关
236235

237236
" :ref:`paddle.bincount <cn_api_tensor_bincount>` ", "统计输入张量中元素的出现次数"
238237
" :ref:`paddle.bmm <cn_api_paddle_tensor_bmm>` ", "对输入x及输入y进行矩阵相乘"
239-
" :ref:`paddle.cholesky <cn_api_tensor_cholesky>` ", "计算一个对称正定矩阵或一批对称正定矩阵的Cholesky分解"
240238
" :ref:`paddle.cross <cn_api_tensor_linalg_cross>` ", "计算张量 x 和 y 在 axis 维度上的向量积(叉积)"
241239
" :ref:`paddle.dist <cn_api_tensor_linalg_dist>` ", "计算 (x-y) 的 p 范数(p-norm)"
242240
" :ref:`paddle.dot <cn_api_paddle_tensor_linalg_dot>` ", "计算向量的内积"
243241
" :ref:`paddle.histogram <cn_api_tensor_histogram>` ", "计算输入张量的直方图"
244242
" :ref:`paddle.matmul <cn_api_tensor_matmul>` ", "计算两个Tensor的乘积,遵循完整的广播规则"
245-
" :ref:`paddle.matrix_power <cn_api_tensor_matrix_power>` ", "计算一个(或一批)方阵的 n 次幂"
246243
" :ref:`paddle.mv <cn_api_tensor_mv>` ", "计算矩阵 x 和向量 vec 的乘积"
247-
" :ref:`paddle.norm <cn_api_tensor_norm>` ", "计算给定Tensor的矩阵范数(Frobenius 范数)和向量范数(向量1范数、2范数、或者通常的p范数)"
248244
" :ref:`paddle.rank <cn_api_fluid_layers_rank>` ", "计算输入Tensor的维度(秩)"
249245
" :ref:`paddle.t <cn_api_paddle_tensor_t>` ", "对小于等于2维的Tensor进行数据转置"
250246
" :ref:`paddle.tril <cn_api_tensor_tril>` ", "返回输入矩阵 input 的下三角部分,其余部分被设为0"
251247
" :ref:`paddle.triu <cn_api_tensor_triu>` ", "返回输入矩阵 input 的上三角部分,其余部分被设为0"
252-
" :ref:`paddle.multi_dot<cn_api_tensor_multi_dot>` ", "计算多个矩阵相乘"
253248

254249
.. _tensor_manipulation:
255250

docs/api/paddle/Tensor_cn.rst

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ cholesky(upper=False, name=None)
480480

481481
返回类型:Tensor
482482

483-
请参考 :ref:`cn_api_tensor_cholesky`
483+
请参考 :ref:`cn_api_linalg_cholesky`
484484

485485
chunk(chunks, axis=0, name=None)
486486
:::::::::
@@ -814,7 +814,7 @@ eigvals(y, name=None)
814814

815815
返回类型:Tensor
816816

817-
请参考 :ref:`cn_api_paddle_linalg_eigvals`
817+
请参考 :ref:`cn_api_linalg_eigvals`
818818

819819
fill_(x, value, name=None)
820820
:::::::::
@@ -1076,14 +1076,14 @@ index_select(index, axis=0, name=None)
10761076

10771077
请参考 :ref:`cn_api_tensor_search_index_select`
10781078

1079-
inverse(name=None)
1079+
inv(name=None)
10801080
:::::::::
10811081

10821082
返回:计算后的Tensor
10831083

10841084
返回类型:Tensor
10851085

1086-
请参考 :ref:`cn_api_tensor_inverse`
1086+
请参考 :ref:`cn_api_linalg_inv`
10871087

10881088
is_empty(cond=None)
10891089
:::::::::
@@ -1263,7 +1263,7 @@ matrix_power(x, n, name=None)
12631263

12641264
返回类型:Tensor
12651265

1266-
请参考 :ref:`cn_api_tensor_matrix_power`
1266+
请参考 :ref:`cn_api_linalg_matrix_power`
12671267

12681268
max(axis=None, keepdim=False, name=None)
12691269
:::::::::
@@ -1402,7 +1402,7 @@ norm(p=fro, axis=None, keepdim=False, name=None)
14021402

14031403
返回类型:Tensor
14041404

1405-
请参考 :ref:`cn_api_tensor_norm`
1405+
请参考 :ref:`cn_api_linalg_norm`
14061406

14071407
not_equal(y, name=None)
14081408
:::::::::
@@ -1950,6 +1950,15 @@ transpose(perm, name=None)
19501950

19511951
请参考 :ref:`cn_api_fluid_layers_transpose`
19521952

1953+
triangular_solve(b, upper=True, transpose=False, unitriangular=False, name=None)
1954+
:::::::::
1955+
1956+
返回:计算后的Tensor
1957+
1958+
返回类型:Tensor
1959+
1960+
请参考 :ref:`cn_api_linalg_triangular_solve`
1961+
19531962
trunc(name=None)
19541963
:::::::::
19551964

@@ -2064,7 +2073,7 @@ multi_dot(x, name=None)
20642073

20652074
返回类型:Tensor
20662075

2067-
请参考 :ref:`cn_api_tensor_multi_dot`
2076+
请参考 :ref:`cn_api_linalg_multi_dot`
20682077

20692078
solve(x, y name=None)
20702079
:::::::::

docs/api/paddle/linalg/Overview_cn.rst

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ paddle.linalg 目录下包含飞桨框架支持的线性代数相关API。具体
2121
:widths: 10, 30
2222

2323
" :ref:`paddle.linalg.det <cn_api_linalg_det>` ", "计算方阵的行列式"
24-
" :ref:`paddle.linalg.slogdet <cn_api_tensor_norm>` ", "计算方阵行列式的符号、绝对值的自然对数"
24+
" :ref:`paddle.linalg.slogdet <cn_api_linalg_slogdet>` ", "计算方阵行列式的符号、绝对值的自然对数"
2525
" :ref:`paddle.linalg.cond <cn_api_linalg_cond>` ", "根据矩阵的范数,来计算矩阵的条件数"
26-
" :ref:`paddle.linalg.norm <cn_api_tensor_norm>` ", "计算矩阵范数或向量范数"
26+
" :ref:`paddle.linalg.norm <cn_api_linalg_norm>` ", "计算矩阵范数或向量范数"
2727
" :ref:`paddle.linalg.matrix_rank <cn_api_linalg_matrix_rank>` ", "计算矩阵的秩"
2828

2929

@@ -36,9 +36,9 @@ paddle.linalg 目录下包含飞桨框架支持的线性代数相关API。具体
3636
:header: "API名称", "API功能"
3737
:widths: 10, 30
3838

39-
" :ref:`paddle.linalg.multi_dot <cn_api_tensor_multi_dot>` ", "2个或更多矩阵的乘法,会自动选择计算量最少的乘法顺序"
40-
" :ref:`paddle.linalg.matrix_power <cn_api_tensor_matrix_power>` ", "计算方阵的n次幂"
41-
" :ref:`paddle.linalg.inv <cn_api_tensor_inverse>` ", "计算方阵的逆矩阵"
39+
" :ref:`paddle.linalg.multi_dot <cn_api_linalg_multi_dot>` ", "2个或更多矩阵的乘法,会自动选择计算量最少的乘法顺序"
40+
" :ref:`paddle.linalg.matrix_power <cn_api_linalg_matrix_power>` ", "计算方阵的n次幂"
41+
" :ref:`paddle.linalg.inv <cn_api_linalg_inv>` ", "计算方阵的逆矩阵"
4242
" :ref:`paddle.linalg.pinv <cn_api_linalg_pinv>` ", "计算矩阵的广义逆"
4343

4444

@@ -52,10 +52,10 @@ paddle.linalg 目录下包含飞桨框架支持的线性代数相关API。具体
5252
:widths: 10, 30
5353

5454
" :ref:`paddle.linalg.eig <cn_api_linalg_eig>` ", "计算一般方阵的特征值与特征向量"
55-
" :ref:`paddle.linalg.eigvals <cn_api_paddle_linalg_eigvals>` ", "计算一般方阵的特征值"
55+
" :ref:`paddle.linalg.eigvals <cn_api_linalg_eigvals>` ", "计算一般方阵的特征值"
5656
" :ref:`paddle.linalg.eigh <cn_api_linalg_eigh>` ", "计算厄米特矩阵或者实数对称矩阵的特征值和特征向量"
5757
" :ref:`paddle.linalg.eigvalsh <cn_api_linalg_eigvalsh>` ", "计算厄米特矩阵或者实数对称矩阵的特征值"
58-
" :ref:`paddle.linalg.cholesky <cn_api_tensor_cholesky>` ", "计算一个实数对称正定矩阵的Cholesky分解"
58+
" :ref:`paddle.linalg.cholesky <cn_api_linalg_cholesky>` ", "计算一个实数对称正定矩阵的Cholesky分解"
5959
" :ref:`paddle.linalg.svd <cn_api_linalg_svd>` ", "计算矩阵的奇异值分解"
6060
" :ref:`paddle.linalg.qr <cn_api_linalg_qr>` ", "计算矩阵的正交三角分解(也称QR分解)"
6161

@@ -70,3 +70,4 @@ paddle.linalg 目录下包含飞桨框架支持的线性代数相关API。具体
7070
:widths: 10, 30
7171

7272
" :ref:`paddle.linalg.solve <cn_api_linalg_solve>` ", "计算具有唯一解的线性方程组"
73+
" :ref:`paddle.linalg.triangular_solve <cn_api_linalg_solve>` ", "计算具有唯一解的线性方程组"

docs/api/paddle/cholesky_cn.rst renamed to docs/api/paddle/linalg/cholesky_cn.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
.. _cn_api_tensor_cholesky:
1+
.. _cn_api_linalg_cholesky:
22

33
cholesky
44
-------------------------------
55

6-
.. py:function:: paddle.cholesky(x, upper=False, name=None)
6+
.. py:function:: paddle.linalg.cholesky(x, upper=False, name=None)
77
88
99
@@ -32,7 +32,7 @@ cholesky
3232
a_t = np.transpose(a, [1, 0])
3333
x_data = np.matmul(a, a_t) + 1e-03
3434
x = paddle.to_tensor(x_data)
35-
out = paddle.cholesky(x, upper=False)
35+
out = paddle.linalg.cholesky(x, upper=False)
3636
print(out)
3737
# [[1.190523 0. 0. ]
3838
# [0.9906703 0.27676893 0. ]

docs/api/paddle/linalg/eigvals_cn.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.. _cn_api_paddle_linalg_eigvals:
1+
.. _cn_api_linalg_eigvals:
22

33
eigvals
44
-------------------------------

docs/api/paddle/inverse_cn.rst renamed to docs/api/paddle/linalg/inv_cn.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
.. _cn_api_tensor_inverse:
1+
.. _cn_api_linalg_inv:
22

3-
inverse
3+
inv
44
-------------------------------
55

6-
.. py:function:: paddle.inverse(x, name=None)
6+
.. py:function:: paddle.linalg.inv(x, name=None)
77
88
99
计算方阵的逆。方阵是行数和列数相等的矩阵。输入可以是一个方阵(2-D张量),或者是批次方阵(维数大于2时)。
@@ -26,5 +26,5 @@ Tensor, 输入方阵的逆。
2626
import paddle
2727
2828
mat = paddle.to_tensor([[2, 0], [0, 2]], dtype='float32')
29-
inv = paddle.inverse(mat)
29+
inv = paddle.linalg.inv(mat)
3030
print(inv) # [[0.5, 0], [0, 0.5]]

docs/api/paddle/linalg/matrix_power_cn.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.. _cn_api_tensor_matrix_power:
1+
.. _cn_api_linalg_matrix_power:
22

33
matrix_power
44
-------------------------------

docs/api/paddle/linalg/multi_dot_cn.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.. _cn_api_tensor_multi_dot:
1+
.. _cn_api_linalg_multi_dot:
22

33
multi_dot
44
-------------------------------

docs/api/paddle/norm_cn.rst renamed to docs/api/paddle/linalg/norm_cn.rst

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
.. _cn_api_tensor_norm:
1+
.. _cn_api_linalg_norm:
22

33
norm
44
-------------------------------
55

6-
.. py:function:: paddle.norm(x, p='fro', axis=None, keepdim=False, name=None):
6+
.. py:function:: paddle.linalg.norm(x, p='fro', axis=None, keepdim=False, name=None):
77
88
99
@@ -12,7 +12,7 @@ norm
1212

1313
.. note::
1414

15-
此API与`numpy.linalg.norm`存在差异。此API支持高阶张量(rank>=3)作为输入,输入`axis`对应的轴就可以计算出norm的值。但是`numpy.linalg.norm`仅支持一维向量和二维矩阵作为输入。特别需要注意的是,此API的P阶矩阵范数,实际上将矩阵摊平成向量计算。实际计算的是向量范数,而不是真正的矩阵范数。
15+
此API与 ``numpy.linalg.norm`` 存在差异。此API支持高阶张量(rank>=3)作为输入,输入 ``axis`` 对应的轴就可以计算出norm的值。但是 ``numpy.linalg.norm`` 仅支持一维向量和二维矩阵作为输入。特别需要注意的是,此API的P阶矩阵范数,实际上将矩阵摊平成向量计算。实际计算的是向量范数,而不是真正的矩阵范数。
1616

1717
参数
1818
:::::::::
@@ -43,27 +43,27 @@ norm
4343
# [[ 0. 1. 2. 3.] [ 4. 5. 6. 7.] [ 8. 9. 10. 11.]]]
4444
4545
# compute frobenius norm along last two dimensions.
46-
out_fro = paddle.norm(x, p='fro', axis=[0,1])
46+
out_fro = paddle.linalg.norm(x, p='fro', axis=[0,1])
4747
# out_fro.numpy() [17.435596 16.911535 16.7332 16.911535]
4848
4949
# compute 2-order vector norm along last dimension.
50-
out_pnorm = paddle.norm(x, p=2, axis=-1)
50+
out_pnorm = paddle.linalg.norm(x, p=2, axis=-1)
5151
#out_pnorm.numpy(): [[21.118711 13.190906 5.477226]
5252
# [ 3.7416575 11.224972 19.131126]]
5353
5454
# compute 2-order norm along [0,1] dimension.
55-
out_pnorm = paddle.norm(x, p=2, axis=[0,1])
55+
out_pnorm = paddle.linalg.norm(x, p=2, axis=[0,1])
5656
#out_pnorm.numpy(): [17.435596 16.911535 16.7332 16.911535]
5757
5858
# compute inf-order norm
59-
out_pnorm = paddle.norm(x, p=np.inf)
59+
out_pnorm = paddle.linalg.norm(x, p=np.inf)
6060
#out_pnorm.numpy() = [12.]
61-
out_pnorm = paddle.norm(x, p=np.inf, axis=0)
61+
out_pnorm = paddle.linalg.norm(x, p=np.inf, axis=0)
6262
#out_pnorm.numpy(): [[12. 11. 10. 9.] [8. 7. 6. 7.] [8. 9. 10. 11.]]
6363
6464
# compute -inf-order norm
65-
out_pnorm = paddle.norm(x, p=-np.inf)
65+
out_pnorm = paddle.linalg.norm(x, p=-np.inf)
6666
#out_pnorm.numpy(): [0.]
67-
out_pnorm = paddle.norm(x, p=-np.inf, axis=0)
67+
out_pnorm = paddle.linalg.norm(x, p=-np.inf, axis=0)
6868
#out_pnorm.numpy(): [[0. 1. 2. 3.] [4. 5. 6. 5.] [4. 3. 2. 1.]]
6969
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
.. _cn_api_linalg_triangular_solve:
2+
3+
triangular_solve
4+
-------------------------------
5+
6+
.. py:function:: paddle.linalg.triangular_solve(x, y, upper=True, transpose=False, unitriangular=False, name=None)
7+
8+
9+
计算具有唯一解的线性方程组解,其中系数矩阵 `x` 是上(下)三角系数矩阵, `y` 是方程右边。
10+
11+
:math:`X` 为一个或一批方阵,:math:`Y` 一个或一批矩阵。
12+
13+
则方程组为:
14+
15+
.. math::
16+
X * Out = Y
17+
18+
方程组的解为:
19+
20+
.. math::
21+
Out = X ^ {-1} * Y
22+
23+
特别地,
24+
25+
- 如果 ``x`` 不可逆 , 则线性方程组不可解。
26+
27+
参数
28+
:::::::::
29+
- **x** (Tensor) : 线性方程组左边的系数方阵,其为一个或一批方阵。``x`` 的形状应为 ``[*, M, M]``,其中 ``*`` 为零或更大的批次维度,数据类型为float32, float64。
30+
- **y** (Tensor) : 线性方程组右边的矩阵,其为一个或一批矩阵。``y`` 的形状应为 ``[*, M, K]``, 其中 ``*`` 为零或更大的批次维度,数据类型为float32, float64。
31+
- **upper** (bool, 可选) - 对系数矩阵 ``x`` 取上三角还是下三角。默认为True,表示取上三角。
32+
- **transpose** (bool, 可选) - 是否对系数矩阵 ``x`` 进行转置。默认为False,不进行转置。
33+
- **unitriangular** (bool, 可选) - 如果为True,则将系数矩阵 ``x`` 对角线元素假设为1来求解方程。默认为False。
34+
- **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。
35+
36+
返回:
37+
:::::::::
38+
- Tensor, 线程方程组的解, 数据类型和 ``x`` 一致。
39+
40+
代码示例
41+
::::::::::
42+
43+
.. code-block:: python
44+
45+
# a square system of linear equations:
46+
# x1 + x2 + x3 = 0
47+
# 2*x2 + x3 = -9
48+
# -x3 = 5
49+
50+
import paddle
51+
import numpy as np
52+
53+
x = paddle.to_tensor([[1, 1, 1],
54+
[0, 2, 1],
55+
[0, 0,-1]], dtype="float64")
56+
y = paddle.to_tensor([[0], [-9], [5]], dtype="float64")
57+
out = paddle.linalg.triangular_solve(x, y, upper=True)
58+
59+
print(out)
60+
# [7, -2, -5]
61+

0 commit comments

Comments
 (0)