Cla*_*u S 5 python arrays numpy
所以我有这个numpy形状的数组(31641600,2),它有一些,如果不是很多零值.
我们称之为数组X.
这样做:
print len(X)
>>> 31641600
Run Code Online (Sandbox Code Playgroud)
但后来做:
X = X[np.nonzero(X)]
print len(X)
>>> 31919809
Run Code Online (Sandbox Code Playgroud)
不明白为什么第二个更大.在文档中它说应用上面的方法应该只返回非零值,因此X的长度应该更小.
有任何想法吗?谢谢.
这可能是因为len(X)只返回X沿第一轴的长度.当你这样做
X = X[np.nonzero(X)]
Run Code Online (Sandbox Code Playgroud)
你得到一维数组,所以如果你的零中少于50%X,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
Run Code Online (Sandbox Code Playgroud)
那是因为X[np.nonzero(X)]是一个43的一个数组:
In [7]: X[np.nonzero(X)].shape
Out[7]: (43,)
Run Code Online (Sandbox Code Playgroud)
响应评论更新:如果实际上你想要第一个元素非零的所有对,你可以这样做:
X = X[ X[:, 0] != 0 ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1693 次 |
| 最近记录: |