2016-01-25 70 views
0

我已經嘗試了幾種方法,不能同時返回兩列。過濾工作,但只返回一列。返回所有的列當用Numpy pythonly過濾矩陣

import numpy as np 
<<<<read in some data, now get counts>>>> 
unique, counts = np.unique(data[0::,2], return_counts=True) 
x = np.asmatrix((unique, counts)) 
x = x.astype(np.int).T 
print x 

現在我得到以下

[[100001  1] 
[100002  1] 
[100003  4]] 

我想在第二列濾鏡> 3

y = x[x[:,1] > 3,].T 
print y 

我現在只有第一列

[[100003]] 

爲什麼我沒有得到?

[[100003  4]] 
+0

當我運行代碼我得到你想要的結果。 – Tobias

回答

2

您可以考慮使用asarray代替asmatrix

x = np.asarray((unique, counts)) 

那麼就應該爲你的工作除了。

當我在蟒蛇3.4/numpy的1.10.1運行你的代碼,如果我使用asmatrix我得到:

>>> x = np.asmatrix((unique, counts)) 
>>> x = x.astype(np.int).T 
>>> y = x[x[:,1] > 10,].T 
/usr/local/lib/python3.4/dist-packages/numpy/matrixlib/defmatrix.py:318: 
VisibleDeprecationWarning: boolean index did not match indexed array along dimension 1; 
dimension is 2 but corresponding boolean dimension is 1 
    out = N.ndarray.__getitem__(self, index) 
+0

老'numpy'這樣做2d布爾索引沒有警告。爲了選擇'矩陣''x'的行,索引需要是1d數組,例如, '(X [:,1]> 10).A1'。這是'np.matrix'有一些隱藏的陷阱的另一種情況。 – hpaulj

+0

首先升級到1.10.4。然後切換到陣列。然後改變了幾行。 'x = np.asarray((unique,counts))。T',然後'x = x.astype(np.int)'然後'print x [x :: 1]> 3] ! – granger