2016-10-14 93 views
2

鑑於以下數組:遍歷numpy的陣列

x = np.array([[0,2,4,5,5.5,6,7],[4,5,6,7,2,3,4]]) 

基於該數組我需要創建另一個數組跳過的行單元中的第一列的值是> 5上。

所以結果應該喜歡這樣:

([[5.5,6,7],[2,3,4]]) 

任何提示對於這個問題的簡單(和快速)的方法? 非常感謝您的幫助!

回答

3

我們可以使用boolean array作爲過濾索引。

>>> x[:, x[0] > 5] 
array([[ 5.5, 6. , 7. ], 
     [ 2. , 3. , 4. ]]) 
  • x[0]選擇第一行
  • x[0] > 5創建布爾的陣列,檢查一個元素是否爲> 5或沒有。 (這是[False, False, False, False, True, True, True]。)
  • 當我們編寫some_array[boolean_array]時,我們只保留some_array中的boolean_array對應值爲True的元素。例如,

    >>> numpy.array([2, 4, 6, 8])[numpy.array([True, False, False, True])] 
    array([2, 8]) 
    
  • 由於我們將選擇列,布爾陣列x[0] > 5應該被放置在所述第二軸線上。我們選擇整個第一軸與:。因此最終表達式是x[:, x[0] > 5]

0

還是枚舉函數:

res = [] 
    for i, _ in enumerate(x): 
    res.append([]) 
    for j, val in enumerate(x[i]): 
     if j > 5: 
      res[i].append(val)