2011-09-25 87 views
6

我有這樣numpy的陣列如何從NumPy數組中逐行選擇元素?

dd= [[foo 0.567 0.611] 
    [bar 0.469 0.479] 
    [noo 0.220 0.269] 
    [tar 0.480 0.508] 
    [boo 0.324 0.324]] 

數組如何將一個遍歷數組 選擇foo和獲得0.567 0.611的花車作爲一個單身。 然後選擇酒吧和獲得0.469 0.479的花車作爲一個單身.....

我可以通過使用

dv= dd[:,1] 

「富」得到向量的第一元素列表,和「酒吧」元素不是未知的變量,他們可以改變。

如果元素處於位置[1],我將如何更改?

[[0.567 foo2 0.611] 
    [0.469 bar2 0.479] 
    [0.220 noo2 0.269] 
    [0.480 tar2 0.508] 
    [0.324 boo2 0.324]] 
+0

什麼是「foo」,「bar」等?字符串?或者只是其他數字的佔位符? –

+0

你怎麼能構建一個包含*既*浮動和字符串的numpy數組? – talonmies

+0

@tal從數據庫。 – Merlin

回答

16

你已經把NumPy的標籤上的問題,所以我」假設你需要NumPy語法,這是我之前的答案不使用的。

如果實際上你想使用NumPy,那麼你可能不希望數組中的字符串,否則你將不得不將浮點數表示爲字符串。

你在找什麼是的NumPy的語法按行訪問一個二維數組的元素(並排除第一列)

即語法是:噸第二場景

M[row_index,1:]  # selects all but 1st col from row given by 'row_index' 

W/R /在Question-- 選擇非相鄰列

M[row_index,[0,2]]  # selects 1st & 3rd cols from row given by 'row_index' 


小併發症你的問題只是你想爲row_index使用一個字符串,所以有必要刪除字符串(這樣你可以創建一個2D NumPy數組的浮點數),用數字代替它們行索引,然後創建一個查表的字符串和數值行索引地圖:

>>> import numpy as NP 
>>> # create a look-up table so you can remove the strings from your python nested list, 
>>> # which will allow you to represent your data as a 2D NumPy array with dtype=float 
>>> keys 
     ['foo', 'bar', 'noo', 'tar', 'boo'] 
>>> values # 1D index array comprised of one float value for each unique string in 'keys' 
     array([0., 1., 2., 3., 4.]) 
>>> LuT = dict(zip(keys, values)) 

>>> # add an index to data by inserting 'values' array as first column of the data matrix 
>>> A = NP.hstack((vals, A)) 
>>> A 
     NP.array([ [ 0., .567, .611], 
        [ 1., .469, .479], 
        [ 2., .22, .269], 
        [ 3., .48, .508], 
        [ 4., .324, .324] ]) 

>>> # so now to look up an item, by 'key': 
>>> # write a small function to perform the look-ups: 
>>> def select_row(key): 
     return A[LuT[key],1:] 

>>> select_row('foo') 
     array([ 0.567, 0.611]) 

>>> select_row('noo') 
     array([ 0.22 , 0.269]) 

第二種情況在你的問題:如果索引列的變化?

>>> # e.g., move index to column 1 (as in your Q) 
>>> A = NP.roll(A, 1, axis=1) 
>>> A 
     array([[ 0.611, 1. , 0.567], 
      [ 0.479, 2. , 0.469], 
      [ 0.269, 3. , 0.22 ], 
      [ 0.508, 4. , 0.48 ], 
      [ 0.324, 5. , 0.324]]) 

>>> # the original function is changed slightly, to select non-adjacent columns: 
>>> def select_row2(key): 
     return A[LuT[key],[0,2]] 

>>> select_row2('foo') 
     array([ 0.611, 0.567]) 
+0

M [row_index,[0,2]] does not work,'row_index'where this function ? – Merlin

+0

@美林:是的,它的工作原理。 'row_index'是一個佔位符或變量 - 它只是意味着+行索引*,它意味着該行的索引(一些整數值) – doug

+0

@Merlin:我向您展示瞭如何在Answer中構建一個鍵值存儲。 ,例如,有2個列表,一個用於鍵,一個用於值。keys = ['key1','key2','key3'],vals = range(3);創建一個由兩個列表組成的元組, zip',然後在這個元組上使用'dict' - 結果是一個字典LuT = dict(zip(keys,vals)) – doug

2

首先,第一元件的載體是

dv = dd[:,0] 

(蟒是0索引)

其次,走陣列(在一個字典和存儲,例如)您寫:

dc = {} 
ind = 0 # this corresponds to the column with the names 
for row in dd: 
    dc[row[ind]] = row[1:] 
+0

「dv = dd [:,0]」,yes it late .... – Merlin