count_nonzero

paddle. count_nonzero ( x, axis=None, keepdim=False, name=None ) [源代码]

沿给定的轴 axis 统计输入 Tensor x 中非零元素的个数。

参数

  • x (Tensor) - 输入的 Tensor,数据类型为:bool、float16、float32、float64、int32、int64。别名:input。

  • axis (None|int|list|tuple,可选) - 指定对 x 进行统计的轴。axis 可以是 int 或 int 元素的列表/元组。axis 值应该在范围[-D,D)内,D 是 x 的维度。如果 axis 或其中的元素值小于 0,则等价于 \(axis + D\)。如果 axis 是 None,则对 x 的全部元素进行统计。默认值为 None。别名:dim。

  • keepdim (bool,可选) - 是否在输出 Tensor 中保留被统计的维度。如果 keepdim 为 True,则输出 Tensor 和 x 具有相同的维度(被统计的维度大小为 1);否则,输出 Tensor 会在 axis 上进行 squeeze 操作。默认值为 False。

  • name (str,可选) - 具体用法请参见 api_guide_Name,一般无需设置,默认值为 None。

返回

Tensor,沿着 axis 统计输入 Tensor 中非零元素的个数,数据类型 int64。

代码示例

>>> import paddle
>>> # x is a 2-D Tensor:
>>> x = paddle.to_tensor(
...     [
...         [0.0, 1.1, 1.2],
...         [0.0, 0.0, 1.3],
...         [0.0, 0.0, 0.0],
...     ]
... )
>>> out1 = paddle.count_nonzero(x)
>>> out1
Tensor(shape=[], dtype=int64, place=Place(cpu), stop_gradient=True,
3)
>>> out2 = paddle.count_nonzero(x, axis=0)
>>> out2
Tensor(shape=[3], dtype=int64, place=Place(cpu), stop_gradient=True,
[0, 1, 2])
>>> out3 = paddle.count_nonzero(x, axis=0, keepdim=True)
>>> out3
Tensor(shape=[1, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[0, 1, 2]])
>>> out4 = paddle.count_nonzero(x, axis=1)
>>> out4
Tensor(shape=[3], dtype=int64, place=Place(cpu), stop_gradient=True,
[2, 1, 0])
>>> out5 = paddle.count_nonzero(x, axis=1, keepdim=True)
>>> out5
Tensor(shape=[3, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
[[2],
 [1],
 [0]])

>>> # y is a 3-D Tensor:
>>> y = paddle.to_tensor(
...     [
...         [[0.0, 1.1, 1.2], [0.0, 0.0, 1.3], [0.0, 0.0, 0.0]],
...         [[0.0, 2.5, 2.6], [0.0, 0.0, 2.4], [2.1, 2.2, 2.3]],
...     ]
... )
>>> out6 = paddle.count_nonzero(y, axis=[1, 2])
>>> out6
Tensor(shape=[2], dtype=int64, place=Place(cpu), stop_gradient=True,
[3, 6])
>>> out7 = paddle.count_nonzero(y, axis=[0, 1])
>>> out7
Tensor(shape=[3], dtype=int64, place=Place(cpu), stop_gradient=True,
[1, 3, 5])