Respuestas:
>>> 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])
Vea también: "numpy.arange" y "rehape" 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)
[row, col]
. La coma se separa.
¿Podría ser que estás usando una matriz NumPy ? Python tiene el módulo de matriz , 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]
Si tienes una matriz como
a = [[1, 2], [2, 3], [3, 4]]
Luego extrae la primera columna así:
[row[0] for row in a]
Entonces el resultado se ve así:
[1, 2, 3]
¡Echale un vistazo!
a = [[1, 2], [2, 3], [3, 4]]
a2 = zip(*a)
a2[0]
es lo mismo que antes, 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
a2 = zip(*a); a2 = list(a2); a2[0]
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.
>>> 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])
arange()
en Python3 fuera de numpy. ¿Nadie?
¡El operador itemgetter también puede ayudar, si le gusta el estilo de reducción de mapas python, en lugar de las comprensiones de listas, para una pequeña 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)
Creo que desea 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]]
Luego, primero debe hacer que la matriz sea una matriz
B=np.asmatrix(A)
C=B[:,2]
D=asarray(C)
Y ahora puede hacer cálculos sabios de elementos como lo haría en Excel.
digamos que tenemos n X m
matriz ( n
filas y m
columnas) digamos 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] ]
array = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
col1 = [val[1] for val in array]
col2 = [val[2] for val in array]
col3 = [val[3] for val in array]
col4 = [val[4] for val in array]
print(col1)
print(col2)
print(col3)
print(col4)
Output:
[1, 5, 9, 13]
[2, 6, 10, 14]
[3, 7, 11, 15]
[4, 8, 12, 16]
Si tiene una matriz bidimensional en Python (no numpy), puede extraer todas las columnas de esta manera,
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)
Por supuesto, puede extraer una sola columna por índice (por ejemplo columns[0]
)
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 una 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í! Por lo tanto, no puede acceder a la última columna o fila por el índice -1.
Si necesita indexación negativa, puede ajustar 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]
Prefiero la siguiente pista: tener la matriz nombrada matrix_a
y usar column_number
, 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]
Simplemente use transpose (), luego puede obtener las columnas tan fácil como obtener filas
matrix=np.array(originalMatrix).transpose()
print matrix[NumberOfColum]
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) ]