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

3 minutos de lectura

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

>>> 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 “reformar” para asignar memoria

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

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

  • Me tomó 2 horas descubrir [:,2] Supongo que esta característica no está en la literatura oficial sobre el corte.

    – Niken

    19 de marzo de 2017 a las 17:48

  • ¿Qué significa la coma?

    – Phil

    24 de noviembre de 2017 a las 18:13

  • @Phil [row, col]. la coma separa.

    – Ashe Ketchum

    11 de diciembre de 2017 a las 20:06

  • ¿Cómo puede esta respuesta tener tantos votos a favor? OP nunca dijo que es una matriz numpy

    – sziraqui

    29 de abril de 2018 a las 11:58

  • para extraer 2 columnas: A[:,[1,3]]por ejemplo extraer la segunda y cuarta columna

    – sadalsuud

    23 de enero de 2019 a las 5:41

avatar de usuario
Martín Geisler

¿Podría ser que estés usando un matriz numérica? Pitón tiene la formación módulo, pero eso no es compatible con 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]

  • Esta debería ser la mejor respuesta. Responde a la pregunta formulada mientras señala una alternativa en NumPy.

    – Marco

    6 de diciembre de 2020 a las 12:33

  • [row[1] for row in A] esto es elegante Vota por eso.

    – Simón Z.

    4 de marzo de 2021 a las 2:22

Si tienes una matriz como

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

Luego extraes la primera columna así:

[row[0] for row in a]

Así que el resultado se ve así:

[1, 2, 3]

¡Échale 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 ordenado, el zip hace el trabajo pero requiere matrices individuales como argumentos, la sintaxis *a desempaqueta la matriz multidimensional en argumentos de matriz única

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

  • ¿Esto está usando numpy?

    – para siempre

    2 de abril de 2019 a las 17:24

  • No puedo encontrar ninguna documentación para arange() en Python3 fuera de numpy. ¿Cualquiera?

    –Kevin W. Matthews

    17 de agosto de 2019 a las 21:45

  • creo que es tensorflow, @KevinWMatthews

    – nerkn

    15 de noviembre de 2020 a las 9:54


Si tiene una matriz bidimensional en Python (no numpy), puede extraer todas las columnas así,

data = [
['a', 1, 2], 
['b', 3, 4], 
['c', 5, 6]
]

columns = list(zip(*data))

print("column[0] = {}".format(columns[0]))
print("column[1] = {}".format(columns[1]))
print("column[2] = {}".format(columns[2]))

Ejecutar este código producirá,

>>> print("column[0] = {}".format(columns[0]))
column[0] = ('a', 'b', 'c')

>>> print("column[1] = {}".format(columns[1]))
column[1] = (1, 3, 5)

>>> print("column[2] = {}".format(columns[2]))
column[2] = (2, 4, 6)

  • ¿Esto está usando numpy?

    – para siempre

    2 de abril de 2019 a las 17:24

  • No puedo encontrar ninguna documentación para arange() en Python3 fuera de numpy. ¿Cualquiera?

    –Kevin W. Matthews

    17 de agosto de 2019 a las 21:45

  • creo que es tensorflow, @KevinWMatthews

    – nerkn

    15 de noviembre de 2020 a las 9:54


avatar de usuario
Pedro Pablo

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)

La función de mapa en Python es otra forma de hacerlo.

¿Ha sido útil esta solución?