nonzero

paddle.fluid.layers.nonzero(input, as_tuple=False)[源代码]

该OP返回输入 input 中非零元素的坐标。如果输入 inputn 维,共包含 z 个非零元素,当 as_tuple = False 时, 返回结果是一个 shape 等于 [z x n]Tensor , 第 i 行代表输入中第 i 个非零元素的坐标;当 as_tuple = True 时, 返回结果是由 n 个大小为 z1-D Tensor 构成的元组,第 i1-D Tensor 记录输入的非零元素在第 i 维的坐标。

参数

  • input (Variable)– 输入张量。
  • as_tuple (bool, optinal) - 返回格式。是否以 1-D Tensor 构成的元组格式返回。

返回

  • Variable (Tensor or tuple(1-D Tensor)),数据类型为 INT64

代码示例

  1. import paddle
  2. import paddle.fluid as fluid
  3. import numpy as np
  4. data1 = np.array([[1.0, 0.0, 0.0],
  5. [0.0, 2.0, 0.0],
  6. [0.0, 0.0, 3.0]])
  7. data2 = np.array([0.0, 1.0, 0.0, 3.0])
  8. data3 = np.array([0.0, 0.0, 0.0])
  9. with fluid.dygraph.guard():
  10. x1 = fluid.dygraph.to_variable(data1)
  11. x2 = fluid.dygraph.to_variable(data2)
  12. x3 = fluid.dygraph.to_variable(data3)
  13. out_z1 = fluid.layers.nonzero(x1)
  14. print(out_z1.numpy())
  15. #[[0 0]
  16. # [1 1]
  17. # [2 2]]
  18. out_z1_tuple = fluid.layers.nonzero(x1, as_tuple=True)
  19. for out in out_z1_tuple:
  20. print(out.numpy())
  21. #[[0]
  22. # [1]
  23. # [2]]
  24. #[[0]
  25. # [1]
  26. # [2]]
  27. out_z2 = fluid.layers.nonzero(x2)
  28. print(out_z2.numpy())
  29. #[[1]
  30. # [3]]
  31. out_z2_tuple = fluid.layers.nonzero(x2, as_tuple=True)
  32. for out in out_z2_tuple:
  33. print(out.numpy())
  34. #[[1]
  35. # [3]]
  36. out_z3 = fluid.layers.nonzero(x3)
  37. print(out_z3.numpy())
  38. #[]
  39. out_z3_tuple = fluid.layers.nonzero(x3, as_tuple=True)
  40. for out in out_z3_tuple:
  41. print(out.numpy())
  42. #[]