繁体   English   中英

如何从NumPy数组中逐行选择元素?

[英]How to select elements row-wise from a NumPy array?

我有一个像这个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]

'foo'和'bar'元素不是未知变量,它们可以改变。

如果元素处于位置[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]]

你已经在你的问题上放了NumPy标签,所以我假设你需要NumPy语法,我之前的答案是不使用的。

如果实际上你想使用NumPy,那么你可能不希望数组中的字符串,否则你还必须将你的浮点数表示为字符串。

您正在寻找的是NumPy语法,用于按行访问2D数组的元素(并排除第一列)

该语法是:

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

W / r / t问题中的第二个场景 - 选择不相邻的列

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


您的问题中的小复杂性只是您想要为row_index使用字符串,因此有必要删除字符串(这样您就可以创建一个2D NumPy浮点数组),用数字行索引替换它们然后创建一个外观 - up table用数字行索引映射字符串

>>> 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])

首先,第一个元素的向量是

dv = dd[:,0]

(python是0索引的)

其次,要遍历数组(例如存储在dict中),您可以编写:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM