¿Cómo seleccionar elementos en fila de una matriz NumPy?

Tengo una matriz como esta matriz 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]] 

¿Cómo sería un bucle a través de un array seleccionando foo y obteniendo 0.567 0.611 como flotadores como un singleton? Luego selecciona la barra y obteniendo 0.469 0.479 como flotadores como un singleton …..

Podría obtener vector los primeros elementos como lista usando

 dv= dd[:,1] 

Los elementos ‘foo’ y ‘bar’ no son variables desconocidas, pueden cambiar.

¿Cómo cambiaría si el elemento está en la posición [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]] 

Ha puesto la etiqueta NumPy en su pregunta, por lo que asumo que desea la syntax NumPy, que la respuesta anterior a la mía no usa.

Si, de hecho, desea utilizar NumPy, es probable que no desee las cadenas en su matriz, de lo contrario también tendrá que representar sus flotantes como cadenas.

Lo que está buscando es la syntax NumPy para acceder a los elementos de una matriz 2D por fila (y excluir la primera columna) .

Esa syntax es:

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

W / r / t el segundo escenario en su pregunta: selección de columnas no adyacentes :

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

La pequeña complicación en su pregunta es que desea usar una cadena para row_index, por lo que es necesario eliminar las cadenas (para poder crear una matriz de flotadores NumPy 2D), reemplazarlos con índices de fila numéricos y luego crear una apariencia. tabla para mapear las cadenas con los índices de fila numéricos :

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

El segundo escenario en su pregunta: ¿qué pasa si la columna de índice cambia?

 >>> # eg, 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]) 

Primero, el vector de los primeros elementos es

 dv = dd[:,0] 

(Python tiene un índice de 0)

En segundo lugar, para recorrer la matriz (y almacenar en un dict, por ejemplo) se escribe:

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