Python Numpy非零

时间:2014-06-25 15:09:18

标签: python arrays numpy

所以我有这个numpy形状的数组(31641600,2),其中有一些(如果不是很多)零值。

让我们调用数组X.

这样做的:

print len(X)
>>> 31641600

然后呢:

X = X[np.nonzero(X)]
print len(X)
>>> 31919809

不明白为什么第二个更大。在Documentation上它表示应用上述方法应该只返回非零值,因此X的长度应该更小。

有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:5)

这可能是因为len(X)仅沿第一轴返回X的长度。当你这样做

X = X[np.nonzero(X)]

你得到一维数组,所以如果X中的零值少于50%,len(X)会增加。

考虑:

In [1]: import numpy as np

In [2]: X = np.zeros((42, 2))

In [3]: X[:, 0] = 1

In [4]: X[0, 1] = 1

In [5]: len(X)
Out[5]: 42

In [6]: len(X[np.nonzero(X)])
Out[6]: 43

那是因为X[np.nonzero(X)]是一个43的数组:

In [7]: X[np.nonzero(X)].shape
Out[7]: (43,)

响应评论更新:如果实际上你想要第一个元素非零的所有对,你可以这样做:

X = X[ X[:, 0] != 0 ]