array_write

  • paddle.fluid.layers.array_write(x, i, array=None)[源代码]

该OP将输入的变量 x 写入到数组 LoDTensorArray array 的第i个位置,并返回修改后的LoDTensorArray,如果 array 为None,则创建一个新的LoDTensorArray。常与 array_read OP联合使用对LoDTensorArray进行读写。

  • 参数:
    • x (Variable) – 待写入的数据,多维Tensor或LoDTensor,数据类型支持float32,float64,int32,int64
    • i (Variable) – shape为[1]的1-D Tensor,表示写入到输出数组LoDTensorArray的位置,数据类型为int64
    • array (Variable,可选) – 指定写入 x 的数组LoDTensorArray。默认值为None, 此时将创建新的LoDTensorArray并作为结果返回

返回: 写入输入 x 之后的LoDTensorArray

返回类型: Variable

代码示例

  1. import paddle.fluid as fluid
  2. tmp = fluid.layers.fill_constant(shape=[3, 2], dtype='int64', value=5)
  3. i = fluid.layers.fill_constant(shape=[1], dtype='int64', value=10)
  4. #将tmp写入数组arr下标为10的位置,并返回arr
  5. arr = fluid.layers.array_write(tmp, i=i)
  6.  
  7. #此时arr是长度为11的LoDTensorArray,可以通过array_read来查看下标为10的LoDTensor,并将之打印出来
  8. item = fluid.layers.array_read(arr, i=i)
  9. input = fluid.layers.Print(item, message="The content of i-th LoDTensor:")
  10. main_program = fluid.default_main_program()
  11. exe = fluid.Executor(fluid.CPUPlace())
  12. exe.run(main_program)

输出结果

  1. 1570533133 The content of i-th LoDTensor: The place is:CPUPlace
  2. Tensor[array_read_0.tmp_0]
  3. shape: [3,2,]
  4. dtype: l
  5. data: 5,5,5,5,5,5,
  6. #返回了shape为[3,2]的Tensor,即为上面写入的tmp
  7. #dtype为对应C++数据类型,在不同环境下可能显示值不同,但本质一致
  8. #例如:如果Tensor中数据类型是int64,则对应的C++数据类型为int64_t,所以dtype值为typeid(int64_t).name(),
  9. # 其在MacOS下为'x',linux下为'l',Windows下为'__int64',都表示64位整型变量