在数组上使用 np.nonzero 后获得正确的尺寸

Getting the correct dimensions after using np.nonzero on array

在一维数组上使用 np.nonzero 时:

l = np.array([0, 1, 2, 3, 0])
np.nonzero(l)
array([1,2,3], dtype=int64)

如何以最有效的方式将索引信息作为一维数组而不是元组获取?

np.nonzero 将 return 索引信息仅作为一维元组。但是,如果您正在寻找替代方案,请使用 np.argwhere

import numpy as np
l = np.array([0, 1, 2, 3, 0])
non_zero = np.argwhere(l!=0)

然而,这将return一个列矩阵。要将其转换为行矩阵,

non_zero = non_zero.T[0]

您正在寻找 np.flatnonzero 用于 1D 数组 -

In [5]: l
Out[5]: array([0, 1, 2, 3, 0])

In [6]: np.flatnonzero(l)
Out[6]: array([1, 2, 3])

只需索引元组

Idn = np.nonzero(l)[0]

flatnonzero 的代码确实

return a.ravel().nonzero()[0]