我有一个形状为(31641600,2)的numpy数组,其中可能有许多零值。
我们称该数组为X。
执行:
print len(X)
>>> 31641600
但是,接下来要做的是:
X = X[np.nonzero(X)]
print len(X)
>>> 31919809
不明白为什么第二个值更大。在文档中,它说采用以上方法应该只返回非零值,因此X的长度应该更小。有任何想法吗?谢谢。
len(X)
仅返回X
沿第一个轴的长度。当你执行以下操作时:X = X[np.nonzero(X)]
您会得到一个一维数组,如果在X
中少于50%的数为零,则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个1组成的数组:
In [7]: X[np.nonzero(X)].shape
Out[7]: (43,)
回应评论中的更新: 如果您确实想要所有第一个元素为非零的对,您可以执行以下操作:
X = X[ X[:, 0] != 0 ]
nonzero
。我已经更新了答案。 - Lev Levitsky