una sumar posiciones matriz matrices imprimir extraer ejemplos datos columnas columna arreglo python arrays multidimensional-array extraction

python - sumar - ¿Cómo se extrae una columna de una matriz multidimensional?



posiciones en una matriz python (17)

¿Alguien sabe cómo extraer una columna de una matriz multidimensional en Python?


¡Echale un vistazo!

a = [[1, 2], [2, 3], [3, 4]] a2 = zip(*a) a2[0]

es lo mismo que el anterior, excepto que de alguna manera es más nítido que el zip haga el trabajo, pero requiere arreglos únicos como argumentos, la sintaxis * a desempaqueta el arreglo multidimensional en argumentos de arreglo único


¿Podría ser que estás usando una matriz NumPy ? Python tiene el módulo de array , pero eso no admite matrices multidimensionales. Las listas normales de Python también son unidimensionales.

Sin embargo, si tiene una lista bidimensional simple como esta:

A = [[1,2,3,4], [5,6,7,8]]

entonces puedes extraer una columna como esta:

def column(matrix, i): return [row[i] for row in matrix]

Extrayendo la segunda columna (índice 1):

>>> column(A, 1) [2, 6]

O, alternativamente, simplemente:

>>> [row[1] for row in A] [2, 6]


A pesar de usar zip(*iterable) para transponer una lista anidada, también puede usar lo siguiente si las listas anidadas varían en longitud:

map(None, *[(1,2,3,), (4,5,), (6,)])

resultados en:

[(1, 4, 6), (2, 5, None), (3, None, None)]

La primera columna es así:

map(None, *[(1,2,3,), (4,5,), (6,)])[0] #>(1, 4, 6)


Bueno, un poco tarde ...

En caso de que el rendimiento sea importante y sus datos tengan forma rectangular, también puede almacenarlos en una dimensión y acceder a las columnas mediante cortes regulares, por ejemplo ...

A = [[1,2,3,4],[5,6,7,8]] #< assume this 4x2-matrix B = reduce( operator.add, A ) #< get it one-dimensional def column1d( matrix, dimX, colIdx ): return matrix[colIdx::dimX] def row1d( matrix, dimX, rowIdx ): return matrix[rowIdx:rowIdx+dimX] >>> column1d( B, 4, 1 ) [2, 6] >>> row1d( B, 4, 1 ) [2, 3, 4, 5]

Lo bueno es que esto es realmente rápido. Sin embargo , ¡los índices negativos no funcionan aquí! Entonces no puedes acceder a la última columna o fila por índice -1.

Si necesita indexación negativa, puede sintonizar un poco las funciones de acceso, p. Ej.

def column1d( matrix, dimX, colIdx ): return matrix[colIdx % dimX::dimX] def row1d( matrix, dimX, dimY, rowIdx ): rowIdx = (rowIdx % dimY) * dimX return matrix[rowIdx:rowIdx+dimX]


Creo que quieres extraer una columna de una matriz, como una matriz a continuación

import numpy as np A = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

Ahora si quieres obtener la tercera columna en el formato

D=array[[3], [7], [11]]

Entonces primero necesitas hacer que la matriz sea una matriz

B=np.asmatrix(A) C=B[:,2] D=asarray(C)

Y ahora puede hacer cálculos basados ​​en elementos de forma muy similar a lo que haría en Excel.


El operador de elemento de elemento también puede ayudar, si le gusta el estilo de mapa y reducir Python, en lugar de listas de comprensión, ¡para obtener un poco de variedad!

# tested in 2.4 from operator import itemgetter def column(matrix,i): f = itemgetter(i) return map(f,matrix) M = [range(x,x+5) for x in range(10)] assert column(M,1) == range(1,11)


Prefiero la siguiente sugerencia: tener la matriz llamada matrix_a y usar matrix_a , por ejemplo:

import numpy as np matrix_a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) column_number=2 # you can get the row from transposed matrix - it will be a column: col=matrix_a.transpose()[column_number]


Puedes usar esto también:

values = np.array([[1,2,3],[4,5,6]]) values[...,0] # first column #[1,4]

Nota: Esto no funciona para la matriz incorporada y no está alineado (por ejemplo, np.array ([[1,2,3], [4,5,6,7]]))


Si quiere tomar más de una columna simplemente use slice:

a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]]) print(a[:, [1, 2]]) [[2 3] [5 6] [8 9]]


Si tienes una matriz como

a = [[1, 2], [2, 3], [3, 4]]

Luego extraes la primera columna así:

[row[0] for row in a]

Entonces el resultado es así:

[1, 2, 3]


Todas las columnas de una matriz en una nueva lista:

N = len(matrix) column_list = [ [matrix[row][column] for row in range(N)] for column in range(N) ]


Una forma más de usar matrices

>>> from numpy import matrix >>> a = [ [1,2,3],[4,5,6],[7,8,9] ] >>> matrix(a).transpose()[1].getA()[0] array([2, 5, 8]) >>> matrix(a).transpose()[0].getA()[0] array([1, 4, 7])


digamos que tenemos n X m matriz ( n filas y m columnas) decir 5 filas y 4 columnas

matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]

Para extraer las columnas en python, podemos usar la comprensión de listas como esta

[ [row[i] for row in matrix] for in range(4) ]

Puede reemplazar 4 por el número de columnas que tenga su matriz. El resultado es

[ [1,5,9,13,17],[2,10,14,18],[3,7,11,15,19],[4,8,12,16,20] ]


>>> import numpy as np >>> A = np.array([[1,2,3,4],[5,6,7,8]]) >>> A array([[1, 2, 3, 4], [5, 6, 7, 8]]) >>> A[:,2] # returns the third columm array([3, 7])

Ver también: "numpy.arange" y "remodelar" para asignar memoria

Ejemplo: (Asignación de una matriz con forma de matriz (3x4))

nrows = 3 ncols = 4 my_array = numpy.arange(nrows*ncols, dtype=''double'') my_array = my_array.reshape(nrows, ncols)


>>> x = arange(20).reshape(4,5) >>> x array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]])

si quieres la segunda columna, puedes usar

>>> x[:, 1] array([ 1, 6, 11, 16])


[matrix[i][column] for i in range(len(matrix))]


def get_col(arr, col): return map(lambda x : x[col], arr) a = [[1,2,3,4], [5,6,7,8], [9,10,11,12],[13,14,15,16]] print get_col(a, 3)

función de mapa en Python es otro camino por recorrer.