2011-09-25 46 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

相关问题