¿Alguien sabe cómo extraer una columna de una matriz multidimensional en Python?¿Cómo se extrae una columna de una matriz multidimensional?
Respuesta
¿Podría ser que esté usando un NumPy array? Python tiene el módulo array, pero eso no admite matrices multidimensionales. Las listas normales de Python también son unidimensionales.
Sin embargo, si tiene una lista simple de dos dimensiones como esto:
A = [[1,2,3,4],
[5,6,7,8]]
continuación, se puede extraer de una columna de esta manera:
def column(matrix, i):
return [row[i] for row in matrix]
extracción de la segunda columna (índice 1):
>>> column(A, 1)
[2, 6]
O, alternativamente, simplemente:
>>> [row[1] for row in A]
[2, 6]
¡El operador del selector de elementos también puede ayudar, si le gusta el estilo de mapa y reducción de 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)
>>> 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 la conformación de la matriz (3x4))
nrows = 3
ncols = 4
my_array = numpy.arange(nrows*ncols, dtype='double')
my_array = my_array.reshape(nrows, ncols)
Me llevó 2 horas descubrir [:, 2] ¿Adivina esta característica no en la literatura oficial sobre rebanar? – sloven
¿Qué significa la coma? – Phil
@Phil '[row, col]'. la coma se separa. – AsheKetchum
Si tiene una matriz como
a = [[1, 2], [2, 3], [3, 4]]
Th en extraer de la primera columna de esa manera:
[row[0] for row in a]
Así, el resultado se parece a esto:
[1, 2, 3]
comprobar que funciona!
a = [[1, 2], [2, 3], [3, 4]]
a2 = zip(*a)
a2[0]
es lo mismo que anteriormente, excepto alguna manera es más ordenado la cremallera hace el trabajo pero requiere matrices individuales como argumentos, el * una sintaxis desempaqueta la matriz multidimensional en argumentos de matriz individuales
¿Qué hay arriba? Recuerde que las respuestas no siempre se ordenan de la misma manera. – Muhd
Esto está limpio, pero podría no ser el más eficiente si el rendimiento es una preocupación, ya que está transponiendo toda la matriz. – IceArdor
FYI, esto funciona en python 2, pero en python 3 obtendrá un objeto generador, que por supuesto no es subscripible. –
a pesar de usar zip(*iterable)
para transponer una lista anidada, también se puede usar la 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)
bien 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 un corte regular, p. ...
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 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 ajustar un poco las funciones de acceso, p.
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]
He comprobado este método y el costo de recuperación de la columna es mucho más barato que anidado para bucles. Sin embargo, reducir una matriz 2d a 1d es costoso si la matriz es grande, digamos 1000 * 1000. –
una forma más usando 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])
[matrix[i][column] for i in range(len(matrix))]
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) ]
Se puede utilizar esta así:
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 (p. np.array ([[1,2,3], [4,5,6,7]]))
Creo que desea extraer una columna de una matriz tal 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 bien, si usted quiere conseguir la tercera columna en el formato
D=array[[3],
[7],
[11]]
Luego hay que hacer primero la matriz una matriz
B=np.asmatrix(A)
C=B[:,2]
D=asarray(C)
Y ahora se puede hacer elemento sabia cálculos muy parecidos a los que haría en excel.
Si bien esto me ayudó mucho, creo que la respuesta puede ser mucho más corta: 1. A = np.array ([[1,2,3,4], [5,6,7,8], [9, 10,11,12]]) 2. A [:, 1] >> array ([2, 6, 10]) – Ufos
digamos que tenemos n X m
matriz (n
filas y m
columnas) dicen 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 de pitón, podemos utilizar la lista de comprensión como esto
[ [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] ]
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 otra manera de ir.
Si quieres tomar más de una columna sólo tiene que utilizar la rebanada:
a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
print(a[:, [1, 2]])
[[2 3]
[5 6]
[8 9]]
- 1. ¿Cómo recorre una matriz multidimensional?
- 2. Numpy: ordenar una matriz multidimensional por una matriz multidimensional
- 3. ¿Cómo urlencode una matriz multidimensional?
- 4. ordenar una matriz asociativa multidimensional?
- 5. typedef de una matriz multidimensional?
- 6. Crea una matriz multidimensional dinámica
- 7. Multi-ordenar una matriz multidimensional
- 8. array_slice en una matriz multidimensional?
- 9. Jinja2: ¿Cómo crear una matriz javascript multidimensional?
- 10. ¿Almacena una matriz multidimensional en una cookie?
- 11. array_push en una matriz multidimensional
- 12. ¿Cómo se puede hacer que una matriz multidimensional sea única?
- 13. ¿Cómo se define una matriz multidimensional en Java con llaves?
- 14. ¿Cómo imprimo una matriz multidimensional en ruby?
- 15. Ordenar una matriz multidimensional en VBA
- 16. ¿Cómo se extrae un subcampo de una matriz en una función de hoja de cálculo?
- 17. Algoritmo para convertir una matriz multidimensional en una matriz unidimensional
- 18. Cómo obtener una dimensión (porción) de una matriz multidimensional
- 19. ¿Cómo puedo encontrar .index de una matriz multidimensional
- 20. ¿Por qué tenemos una matriz dentada y una matriz multidimensional?
- 21. almacenando permisos en una matriz multidimensional php
- 22. ¿Cómo puedo pasar una matriz multidimensional a una función?
- 23. Actualización de una matriz multidimensional en PHP
- 24. Convertir una matriz multidimensional en una matriz unidimensional
- 25. ¿Cómo asignar una matriz multidimensional a una variable temporal?
- 26. Autocorrelación de una matriz multidimensional en numpy
- 27. PHP - Almacenando mysql_fetch_assoc en una matriz multidimensional
- 28. PHP - desarmado en una matriz multidimensional
- 29. índice del elemento en una matriz multidimensional
- 30. Arrays PHP: ¿cómo hacer una matriz unidimensional en una matriz multidimensional anidada?
uso itertools.imap de datos de gran tamaño –
El enfoque itemgetter corrió sobre 50 veces más rápido que el enfoque de lista por comprensión para mi caso de uso. Python 2.7.2, el caso de uso contenía muchas iteraciones en una matriz con cientos de filas y columnas. – joelpt