numpy.extract和numpy.any函数,是否可以使它更简单?

时间:2009-10-16 17:00:45

标签: python numpy

如果有可能使这段代码更简单,我真的很感激!我试图摆脱零行。第一列是日期。如果所有其他列都为零,则必须删除它们。列数各不相同。

import numpy as np

condition = [ np.any( list(x)[1:] ) for x in r]
r = np.extract( condition, r )

numpy.extract docs

1 个答案:

答案 0 :(得分:4)

您可以避免列表理解,而是使用花哨的索引:

#!/usr/bin/env python
import numpy as np
import datetime
r=np.array([(datetime.date(2000,1,1),0,1),
            (datetime.date(2000,1,1),1,1),
            (datetime.date(2000,1,1),1,0),
            (datetime.date(2000,1,1),0,0),                        
            ])
r=r[r[:,1:].any(axis=1)]
print(r)
# [[2000-01-01 0 1]
#  [2000-01-01 1 1]
#  [2000-01-01 1 0]

如果r是ndarray,那么 r [:,1:]是删除了第一列的视图。 r [:,1:]。any(axis = 1)是一个布尔数组,您可以将其用作“花式索引”