2014-01-24 39 views
2

有沒有辦法找到使用np.where拋出異常的索引? 例如:異常平等檢查 - 用Numpy查找拋出異常的索引其中

a = np.array(['0.0', 'hi', '2012:13', '2013/04/05', '9.8', '7.6']) 

print np.where(np.float64(a)==Exception)[0][-1] 

我希望能提供這樣的輸出:

[ 0. 4. 5.] 

但是,它給出了這樣的輸出:

ValueError: could not convert string to float: hi 

該腳本可以提供答案,但似乎相當低效,而且更少pythonic:

b = np.array([]) 
for i, x in enumerate(a): 
    try: 
     np.float64(x) 
    except: 
     b = np.hstack((b,i)) 
print b 

回答

1

你可以define a function

def is_number(s): 
    try: 
     np.float64(s) 
     return True 
    except ValueError: 
     return False 

,然後通過列表理解

print np.array([np.float64(x) for x in a if is_number(x)]) 

收集您的花車如果這是在可讀性或代碼將取決於您是否可以使用該功能緊湊性更好在你的代碼中的幾個地方。關於效率的問題我期望這個解決方案對於大型問題更快;因爲我擔心hstack的O(len(b))的複雜性,這意味着O(len(b)**2)代表您當前擁有的腳本。

+0

謝謝,我沒有看到你提供的鏈接,這讓我感覺使用這種方法更好一點。起初,我正在尋找一個numpy的襯墊,因爲它看起來是最高效的,而且是很多次pythonic或容易理解的。 但是,這似乎是達成一致的最可接受的方式來做到這一點。 – chase