2014-07-07 26 views
1

我在python中有這個數組,我想提取以p結尾的行到一個新數組中。從字母數組中提取一行python

array([[ 0, 6, p], 
     [ 1, 7, m], 
     [ 2, 10, m], 
     [ 3, 4, p], 
     [ 4, 1, m], 
     [ 5, 10, p], 
     [ 6, 6, m], 
     [ 7, 4, m], 
     [ 8, 6, p], 
     [ 9, 7, p]]) 
+0

有你有沒有試圖自己編碼?如果是這樣,你能分享一下嗎? – Ffisegydd

+0

真的是'p'嗎? –

+0

'p'是你在某處定義的整數變量嗎? – user2357112

回答

-1

這是很容易在Python中。

,你可以這樣做:

p = array[SOME_RANDOM_CELL]; 
print p[0] 
+0

轉換了數組。因爲這是一個NumPy問題,我們正在尋找一種方法來以無循環方式提取所有具有'p'作爲最後一個元素的行。索引檢索單個元素很容易。 – user2357112

+0

哦,對不起我的錯誤。即時通訊新的到這個網站,我沒有看標籤的習慣 – DTSCode

1

您可以使用過濾器來解決這個問題。

data = [ 
    [ 0, 6, "p"], 
    [ 1, 7, "m"], 
    [ 2, 10, "m"], 
    [ 3, 4, "p"], 
    [ 4, 1, "m"], 
    [ 5, 10, "p"], 
    [ 6, 6, "m"], 
    [ 7, 4, "m"], 
    [ 8, 6, "p"], 
    [ 9, 7, "p"] 
] 

new_data = filter(lambda l: l[2] == "p", data) 

上述結構假定您正在處理列表(數組數組),但是同樣應用於元組和字典。

這裏是一個過濾函數的引用: https://docs.python.org/2/library/functions.html#filter

+0

我們不處理列表,元組或詞典。我們正在處理一個NumPy數組。 'filter'會很慢並返回一個列表;我們需要一個NumPy解決方案。 – user2357112

+0

@ user2357112顯然他正在使用一個列表....(請參閱我的回答評論) –

+0

所以他是。這使得這個答案更合理(儘管我會去尋求一個列表理解而不是'過濾器')。不幸的是,我的投票鎖定了。 – user2357112

2

簡單的方法是使用numpy的布爾指標如下

a = numpy.array(a) # ensure its a numpy array 
print a[a[:,-1]=="p"] 

打破它

mask = a[:,-1]=="p" #gives an array of True/False that is the same as the array, based on if last char is "p" 
a[mask] #indexes into the original array returning only the rows that end with "p" 
+0

原始數組與列表函數一起閱讀,當我嘗試這樣我得到TypeError:列表索引必須是整數,而不是元組 – Josh

+1

爲什麼你標記它numpy如果它不是一個numpy數組? ...無論如何編輯,使其成爲一個numpy陣列... –

+0

我知道它與newarray = a [np.where(a [:, - 1] ==「p」)]]一起工作。這是將它轉換爲一個numpy數組array1 = np.asarray(listreadversion)後。 – Josh