Migrate 4 APIs about array to paddle.tensor.* (#29565)
4 APIs: array_length, array_read, array_write, create_arrayrevert-31562-mean
parent
1cbb282d77
commit
0cc42e34c6
@ -0,0 +1,150 @@
|
||||
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Define functions about array.
|
||||
|
||||
from ..fluid import layers
|
||||
|
||||
|
||||
def array_length(array):
|
||||
"""
|
||||
This OP is used to get the length of the input array.
|
||||
|
||||
Args:
|
||||
array (list|Tensor): The input array that will be used to compute the length. In dynamic mode, ``array`` is a Python list. But in static mode, array is a Tensor whose VarType is LOD_TENSOR_ARRAY.
|
||||
|
||||
Returns:
|
||||
Tensor: 1-D Tensor with shape [1], which is the length of array.
|
||||
|
||||
Examples:
|
||||
.. code-block:: python
|
||||
|
||||
import paddle
|
||||
|
||||
arr = paddle.tensor.create_array(dtype='float32')
|
||||
x = paddle.full(shape=[3, 3], fill_value=5, dtype="float32")
|
||||
i = paddle.zeros(shape=[1], dtype="int32")
|
||||
|
||||
arr = paddle.tensor.array_write(x, i, array=arr)
|
||||
|
||||
arr_len = paddle.tensor.array_length(arr)
|
||||
print(arr_len) # 1
|
||||
"""
|
||||
return layers.array_length(array)
|
||||
|
||||
|
||||
def array_read(array, i):
|
||||
"""
|
||||
This OP is used to read data at the specified position from the input array.
|
||||
|
||||
Case:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
Input:
|
||||
The shape of first three tensors are [1], and that of the last one is [1,2]:
|
||||
array = ([0.6], [0.1], [0.3], [0.4, 0.2])
|
||||
And:
|
||||
i = [3]
|
||||
|
||||
Output:
|
||||
output = [0.4, 0.2]
|
||||
|
||||
Args:
|
||||
array (list|Tensor): The input array. In dynamic mode, ``array`` is a Python list. But in static mode, array is a Tensor whose ``VarType`` is ``LOD_TENSOR_ARRAY``.
|
||||
i (Tensor): 1-D Tensor, whose shape is [1] and dtype is int64. It represents the
|
||||
specified read position of ``array``.
|
||||
|
||||
Returns:
|
||||
Tensor: A Tensor that is read at the specified position of ``array``.
|
||||
|
||||
Examples:
|
||||
.. code-block:: python
|
||||
|
||||
import paddle
|
||||
|
||||
arr = paddle.tensor.create_array(dtype="float32")
|
||||
x = paddle.full(shape=[1, 3], fill_value=5, dtype="float32")
|
||||
i = paddle.zeros(shape=[1], dtype="int32")
|
||||
|
||||
arr = paddle.tensor.array_write(x, i, array=arr)
|
||||
|
||||
item = paddle.tensor.array_read(arr, i)
|
||||
print(item) # [[5., 5., 5.]]
|
||||
"""
|
||||
return layers.array_read(array, i)
|
||||
|
||||
|
||||
def array_write(x, i, array=None):
|
||||
"""
|
||||
This OP writes the input ``x`` into the i-th position of the ``array`` returns the modified array.
|
||||
If ``array`` is none, a new array will be created and returned.
|
||||
|
||||
Args:
|
||||
x (Tensor): The input data to be written into array. It's multi-dimensional
|
||||
Tensor or LoDTensor. Data type: float32, float64, int32, int64 and bool.
|
||||
i (Tensor): 1-D Tensor with shape [1], which represents the position into which
|
||||
``x`` is written.
|
||||
array (list|Tensor, optional): The array into which ``x`` is written. The default value is None,
|
||||
when a new array will be created and returned as a result. In dynamic mode, ``array`` is a Python list.
|
||||
But in static mode, array is a Tensor whose ``VarType`` is ``LOD_TENSOR_ARRAY``.
|
||||
|
||||
Returns:
|
||||
list|Tensor: The input ``array`` after ``x`` is written into.
|
||||
|
||||
Examples:
|
||||
.. code-block:: python
|
||||
|
||||
import paddle
|
||||
|
||||
arr = paddle.tensor.create_array(dtype="float32")
|
||||
x = paddle.full(shape=[1, 3], fill_value=5, dtype="float32")
|
||||
i = paddle.zeros(shape=[1], dtype="int32")
|
||||
|
||||
arr = paddle.tensor.array_write(x, i, array=arr)
|
||||
|
||||
item = paddle.tensor.array_read(arr, i)
|
||||
print(item) # [[5., 5., 5.]]
|
||||
"""
|
||||
return layers.array_write(x, i, array)
|
||||
|
||||
|
||||
def create_array(dtype):
|
||||
"""
|
||||
This OP creates an array. It is used as the input of :ref:`api_paddle_tensor_array_array_read` and
|
||||
:ref:`api_paddle_tensor_array_array_write`.
|
||||
|
||||
Args:
|
||||
dtype (str): The data type of the elements in the array. Support data type: float32, float64, int32, int64 and bool.
|
||||
|
||||
Returns:
|
||||
list|Tensor: An empty array. In dynamic mode, ``array`` is a Python list. But in static mode, array is a Tensor
|
||||
whose ``VarType`` is ``LOD_TENSOR_ARRAY``.
|
||||
|
||||
Examples:
|
||||
.. code-block:: python
|
||||
|
||||
import paddle
|
||||
|
||||
arr = paddle.tensor.create_array(dtype="float32")
|
||||
x = paddle.full(shape=[1, 3], fill_value=5, dtype="float32")
|
||||
i = paddle.zeros(shape=[1], dtype="int32")
|
||||
|
||||
arr = paddle.tensor.array_write(x, i, array=arr)
|
||||
|
||||
item = paddle.tensor.array_read(arr, i)
|
||||
print(item) # [[5., 5., 5.]]
|
||||
|
||||
"""
|
||||
return layers.create_array(dtype)
|
Loading…
Reference in new issue