From 483af8dc62e16d904aa9f9831908afd52d42bb0f Mon Sep 17 00:00:00 2001 From: ShenLiang <2282912238@qq.com> Date: Tue, 28 Jul 2020 18:25:38 +0800 Subject: [PATCH] add cholesky (#2243) * add cholesky_cn * add dot, inverse, test=document * fix doc, test=document * fix doc, test=document --- doc/fluid/api_cn/tensor_cn/cholesky_cn.rst | 41 +++++++++++++++++++++- doc/fluid/api_cn/tensor_cn/dot_cn.rst | 24 ++++++------- doc/fluid/api_cn/tensor_cn/inverse_cn.rst | 28 +++++++-------- 3 files changed, 65 insertions(+), 28 deletions(-) diff --git a/doc/fluid/api_cn/tensor_cn/cholesky_cn.rst b/doc/fluid/api_cn/tensor_cn/cholesky_cn.rst index c318bf86b..5c2b0b8e0 100644 --- a/doc/fluid/api_cn/tensor_cn/cholesky_cn.rst +++ b/doc/fluid/api_cn/tensor_cn/cholesky_cn.rst @@ -1,3 +1,42 @@ +.. _cn_api_tensor_cholesky: + cholesky ------------------------------- -**版本升级,文档正在开发中** + +.. py:function:: paddle.cholesky(x, upper=False, name=None) + +:alias_main: paddle.cholesky +:alias: paddle.cholesky, paddle.tensor.cholesky, paddle.tensor.linalg.cholesky + + + +计算一个对称正定矩阵或一批对称正定矩阵的Cholesky分解。如果 `upper` 是 `True` , +则分解形式为 :math:`A = U ^ {T} U` , 返回的矩阵U是上三角矩阵。 +否则,分解形式为 :math:`A = LL ^ {T}` ,并返回矩阵 :math:`L` 是下三角矩阵。 + +参数: + - **x** (Variable)- 输入变量为多维Tensor,它的维度应该为 `[*, M, N]` ,其中*为零或更大的批次尺寸,并且最里面的两个维度上的矩阵都应为对称的正定矩阵,支持数据类型为float32,float64。 + - **upper** (bool)- 指示是否返回上三角矩阵或下三角矩阵。默认值:False。 + - **name** (str , 可选)- 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。 + +返回: 与 `x` 具有相同形状和数据类型的Tensor。它代表了Cholesky分解生成的三角矩阵。 + +返回类型: 变量(Variable) + +**代码示例** + +.. code-block:: python + + import paddle + import numpy as np + + paddle.enable_imperative() + a = np.random.rand(3, 3) + a_t = np.transpose(a, [1, 0]) + x_data = np.matmul(a, a_t) + 1e-03 + x = paddle.imperative.to_variable(x_data) + out = paddle.cholesky(x, upper=False) + print(out.numpy()) + # [[1.190523 0. 0. ] + # [0.9906703 0.27676893 0. ] + # [1.25450498 0.05600871 0.06400121]] diff --git a/doc/fluid/api_cn/tensor_cn/dot_cn.rst b/doc/fluid/api_cn/tensor_cn/dot_cn.rst index 6d6d56c88..70cadfbe6 100644 --- a/doc/fluid/api_cn/tensor_cn/dot_cn.rst +++ b/doc/fluid/api_cn/tensor_cn/dot_cn.rst @@ -6,22 +6,23 @@ dot .. py:function:: paddle.tensor.linalg.dot(x, y, name=None) :alias_main: paddle.dot -:alias: paddle.dot,paddle.tensor.dot,paddle.tensor.linalg.dot +:alias: paddle.dot, paddle.tensor.dot, paddle.tensor.linalg.dot 该OP计算向量的内积 .. note:: + 仅支持1维Tensor(向量). 参数: - - **x** (Variable)- 1维 ``Tensor`` 或 ``LoDTensor`` 。数据类型为 ``float32`` 、 ``float64`` 、 ``int32`` 或 ``int64``。 - - **y** (Variable)- 1维 ``Tensor`` 或 ``LoDTensor`` 。数据类型为 ``float32`` 、 ``float64`` 、 ``int32`` 或 ``int64``。 + - **x** (Variable)- 1维 ``Tensor`` 。数据类型为 ``float32`` 、 ``float64`` 、 ``int32`` 或 ``int64`` 。 + - **y** (Variable)- 1维 ``Tensor`` 。数据类型为 ``float32`` 、 ``float64`` 、 ``int32`` 或 ``int64`` 。 - **name** (str,可选)- 输出的名字。默认值为None。该参数供开发人员打印调试信息时使用,具体用法请参见 :ref:`api_guide_Name` 。 -返回: ``Tensor`` 或 ``LoDTensor`` ,数据类型与 ``x`` 相同。 +返回: ``Tensor`` ,数据类型与 ``x`` 相同。 返回类型: Variable。 @@ -30,13 +31,12 @@ dot .. code-block:: python import paddle - import paddle.fluid as fluid import numpy as np - with fluid.dygraph.guard(): - x = fluid.dygraph.to_variable(np.random.uniform(0.1, 1, [10]).astype(np.float32)) - y = fluid.dygraph.to_variable(np.random.uniform(1, 3, [10]).astype(np.float32)) - z = paddle.dot(x, y) - print(z.numpy()) - - + paddle.enable_imperative() + x_data = np.random.uniform(0.1, 1, [10]).astype(np.float32) + y_data = np.random.uniform(1, 3, [10]).astype(np.float32) + x = paddle.imperative.to_variable(x_data) + y = paddle.imperative.to_variable(y_data) + z = paddle.dot(x, y) + print(z.numpy()) diff --git a/doc/fluid/api_cn/tensor_cn/inverse_cn.rst b/doc/fluid/api_cn/tensor_cn/inverse_cn.rst index 131b04137..a8f79737f 100644 --- a/doc/fluid/api_cn/tensor_cn/inverse_cn.rst +++ b/doc/fluid/api_cn/tensor_cn/inverse_cn.rst @@ -3,30 +3,28 @@ inverse ------------------------------- -.. py:function:: paddle.inverse(input, out=None, name=None) +.. py:function:: paddle.inverse(x, name=None) :alias_main: paddle.inverse -:alias: paddle.inverse,paddle.tensor.inverse,paddle.tensor.math.inverse +:alias: paddle.inverse, paddle.tensor.inverse, paddle.tensor.math.inverse 计算方阵的逆。方阵是行数和列数相等的矩阵。输入可以是一个方阵(2-D张量),或者是批次方阵(维数大于2时)。 -**参数**: - - **input** (Variable) – 输入张量,最后两维的大小必须相等。如果输入张量的维数大于2,则高维部分代表2-D矩阵的批次(batch)。支持的数据类型:float32,float64。 - - **out** (Variable,可选) – 指定求和的结果Tensor,可以是程序中已经创建的任何Variable。默认值为None,此时将创建新的Variable来保存输出结果。 +**参数**: + - **x** (Variable) – 输入张量,最后两维的大小必须相等。如果输入张量的维数大于2,则被视为2-D矩阵的批次(batch)。支持的数据类型:float32,float64。 - **name** (str,可选) – 该参数供开发人员打印调试信息时使用,具体用法请参见 :ref:`api_guide_Name` ,默认值为None。 -**返回**:数据类型同输入。 +**返回**: 数据类型同输入。 -返回类型:Variable +返回类型: Variable 抛出异常: - - :code:`TypeError` ,input不是Variable类型,或者数据类型不是float32、float64时 - - :code:`ValueError` ,input的维数小于2时 - - :code:`TypeError` ,out不是Variable类型,或者数据类型和input不相同时 + - :code:`TypeError` ,x不是Variable类型,或者数据类型不是float32、float64时 + - :code:`ValueError` ,x的维数小于2时 -**代码示例**: +**代码示例**: .. code-block:: python @@ -34,7 +32,7 @@ inverse import paddle mat_np = np.array([[2, 0], [0, 2]]).astype("float32") - with paddle.imperative.guard(): - mat = paddle.imperative.to_variable(mat_np) - inv = paddle.inverse(mat) - print(inv.numpy()) # [[0.5, 0], [0, 0.5]] + paddle.enable_imperative() + mat = paddle.imperative.to_variable(mat_np) + inv = paddle.inverse(mat) + print(inv) # [[0.5, 0], [0, 0.5]] -- GitLab