El Curso de Python y Django de Platzi convierte esto en tu profesión, uno de los mejores pagados trabajos del mundo.
A diferencia de lenguajes como C, en Python no resulta intuitivo el proceso de creación de una matriz. Este tutorial está escrito con el objetivo de brindar una solución a este problema a través de la utilización de listas. A continuación, pongo a su disposición fragmentos de código que yo mismo he escrito y utilizado a la hora de implementar una matriz en mis scripts.
La característica común a los métodos presentado a continuación es que nuestra matriz, llamada apropiadamente "matriz" es una lista de python.
El primer método inserta en matriz numero_filas listas como elementos de ésta. A continuación, para cada lista en matriz, son insertados numero_columnas elementos None en cada una de ellas.
Código :
# La mas sencilla e intuitiva matriz = [] for i in range(numero_filas): matriz.append([]) for j in range(numero_columnas): matriz[i].append(None)
En este método, matriz hace referencia a una lista con numero_filas elementos None, luego se procede a hacer que cada posición de matriz haga referencia a una lista con numero_columnas elementos None.
Código :
# Menos intuitiva pero mas eficiente matriz = [None] * numero_filas for i in range(numero_filas): matriz[i] = [None] * numero_columnas
En esta ocación se utiliza una característica muy interesante y poderosa de Python, listas por comprensión. Cada elemento de la lista matriz será a su vez una lista de tamaño numero_columnas, generada por la función range de Python. Al iterar numero_filas veces ésta función, nos aseguramos de que matriz tenga numero_filas filas.
Código :
# Versión mas compacta matriz = [range(numero_columnas) for i in range(numero_filas)] # Variación de la anterior matriz = [[None] * numero_columnas for i in range(numero_filas)]
Podrías estar tentado a hacer lo siguiente
Código :
matriz = [[None] * numero_columnas] * numero_filas
¡Ésto esta mal! Python evalúa una y solo una vez la expresión que posteriormente será copiada y concatenada numero_filas-veces, es decir, la expresión
Código :
[[None] * numero_columnas]
siempre hará referencia a la misma lista y en consecuencia al escribir
Código :
matriz[i][j] = valor
estaremos modificando más de una celda a la vez (porque dichas celdas harán referencia al mismo objeto).
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por syslock64 el 09 de Enero de 2012
Por Rafael Poveda el 09 de Enero de 2012
Seria de esta manera para crear una matriz de 3X3
import numpy as np
mi_matriz = np.array([[1,2,3],[4,5,6],[7,8,9]])
y con eso creo mi matriz. Si quiero acceder a un valor de la matriz puedo hacerlo mediante:
valor = mi_matriz[fila,columna]
De esta manera puedo realizar operaciones con matrices mas fácilmente en Python.
Por EPadronU el 09 de Enero de 2012
Rafael Poveda-blog :
Seria de esta manera para crear una matriz de 3X3
import numpy as np
mi_matriz = np.array([[1,2,3],[4,5,6],[7,8,9]])
y con eso creo mi matriz. Si quiero acceder a un valor de la matriz puedo hacerlo mediante:
valor = mi_matriz[fila,columna]
De esta manera puedo realizar operaciones con matrices mas fácilmente en Python.
He realizado una búsqueda rápida y quiero mostrarte lo que he encontrado
http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html :
class numpy.matrix
Returns a matrix from an array-like object, or from a string of data. A matrix is a specialized 2-D array that retains its 2-D nature through operations. It has certain special operators, such as * (matrix multiplication) and ** (matrix power).
Es decir, la verdadera ventaja que ofrece utilizar la clase numpy.matrix son los métodos matemáticos asociados a ésta, tales como multiplicación y potencia (de acuerdo a la cita anterior); no estoy diciendo que ésto no sea bueno, todo lo contrario ¡es excelente!, sin embargo, el constructor de la clase te pide como argumento "un objeto tipo arreglo o una cadena", es decir, de todas formas tienes que construir la matriz, utilizando los métodos que he compartido, por ejemplo; para pasarle el objeto resultante al constructor de la clase numpy.matrix
Por Rafael Poveda el 09 de Enero de 2012
Por otro lado, excelente articulo. Estoy convencido que Python puede ser un completo reemplazo a programas como Matlab, Octave, etc.
Saludos
Por EPadronU el 09 de Enero de 2012
Rafael Poveda-blog :
La palabra intuitivo esta en cursiva por una razón: esta sujeta a la subjetividad de cada persona. Por ejemplo, para mi es mas intuitivo hacer algo como
Código :
Rafael Poveda-blog :
Por otro lado, excelente articulo. Estoy convencido que Python puede ser un completo reemplazo a programas como Matlab, Octave, etc.
Saludos
Muchas gracias
Por JaAViEr el 25 de Enero de 2012
Me parece un artículo bastante interesante !
En otra ocasión podrías hablar sobre cómo aplicar condicionales en matrices
o listas.Se hace como en Haskell :
Código :
Es una manera interesante de acortar códigos
Por EPadronU el 25 de Enero de 2012
JaAViEr :
Me parece un artículo bastante interesante !
Muchas Gracias
JaAViEr :
En otra ocasión podrías hablar sobre cómo aplicar condicionales en matrices
o listas.Se hace como en Haskell :
Código :
Es una manera interesante de acortar códigos
Gracias por la idea, prepararé un tutorial sobre listas por comprensión.
Por Juanlu_001 el 09 de Junio de 2012
EPadronU :
La palabra intuitivo esta en cursiva por una razón: esta sujeta a la subjetividad de cada persona. Por ejemplo, para mi es mas intuitivo hacer algo como
Código :
¿Qué tal
Código :
?
http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html
Por vcallegarip el 06 de Julio de 2012
Por Miguel Mendez el 23 de Noviembre de 2012
matriz =((1,2,3),
(4,5,6),
(7,8,9))
y luego las puedes refernciar matriz[n][m]
Por Belén el 26 de Enero de 2013
Por asley el 21 de Mayo de 2013
Saludos y excelente post!!!!
Por ailen el 16 de Junio de 2013
teniendo este programa con funciones... necesito hacer una funcion
def leerIm(nombreFichero):
#lee imagen del fichero tux.txt
f=open(nombreFichero)
im1=f.read()
f.close()
#convierte datos en matriz
lin=im1.split('\n')
matriz=[]
for l in lin:
if l=='': break
matriz.append(map(int,l.split()))
return matriz
def dibujarIm(matriz):
filas=len(matriz)
columnas=len(matriz[0])
l=[]
xx1,yy1,xx2,yy2=window_coordinates()
px=float(xx2-xx1)/columnas
py=float(yy2-yy1)/filas
for i in range(filas):
for j in range(columnas):
if matriz[i][j]==-1:
col='#ffff00'
else:
col=_entero2color(matriz[i][j])
x1=xx1+px*j
y1=yy2-py*(i+1)
x2=xx1+px*(j+1)
y2=yy2-py*i
l.append(create_filled_rectangle(x1,y1,x2,y2,col))
return l
Por hola el 04 de Julio de 2013
Por Luis el 02 de Noviembre de 2013
osea en espiral.
dado el largo y el ancho solamente de la matriz
ej. 4x5
1 2 3 4
14 15 16 5
13 20 17 6
12 19 18 7
11 10 9 8
gracias de antemano por responder
Por seas el 01 de Abril de 2014
Por seas el 01 de Abril de 2014
osea en espiral.
dado el largo y el ancho solamente de la matriz
ej. 4x5
1 2 3 4
14 15 16 5
13 20 17 6
12 19 18 7
11 10 9 8
gracias de antemano por responder
Para observar la matriz asi es:
a=[[1,2],[3,4],[5,6]]
for i in range(0,len(a)):
print(a[i])
Por Pythonisa el 08 de Mayo de 2014
Soy nueva con Python, y estoy tratando de leer un archivo csv en Python. Se como hacer para que me imprima todos los datos, e incluso, para que me imprima solo los datos de la última fila, pero no consigo imprimir, un dato en concreto, por ejemplo, el que se encuentra en la posición 5 de la fila 600.
Saludos!
Por gabriel el 22 de Noviembre de 2014
Por jlkjpjpolklkpopoikll el 13 de Abril de 2015
Por fede el 16 de Junio de 2016
# -*- coding: utf-8 -*-
#
# ******************************************************************************
# MATERIA : Informática
# EXAMEN : Especificación de Algoritmos 1er Semestre 2014
# NOMBRE :
# MATRICULA :
# CARRERA :
# COMISION : Comisión 2.4
# ******************************************************************************
#
# Estimado alumno: No modifique nada del código que le proveemos y
# use los procedimientos o funciones que estan definidas.
#
#
#
# Realice un programa en Python con las siguientes caracteristicas:
#
#
# 1) Se solicita que la cantidad de filas y columnas de una matriz CUADRADA se ingrese por teclado.
#
#
# 2) Se debe validar que la cantidad de filas y columnas son mayores a cero.
# De no cumplirse la condición, volver a solicitar dicho valor hasta
# que éste sea válido.
#
#
# 3) Se deben ingresar los valores de la matriz por el teclado, los valores deben ser numeros enteros
# pero NO es necesario verificarlo
#
#
# 4) Se debe crear una función que reciba una matriz y verifique que sus elementos sean
# numeros pares, caso contrario el elemento debe ser remplazado por un 0
#
# El nombre de la función es obtener_matriz_de_pares y su encabezado
# ya se encuentra declarado a continuación del enunciado.
# No se deben modificar ni el nombre ni los parámetros de la función.
#
#
# 5) Se debe mostrar la matriz ingresada por consola, bajo el título " \\ Matriz Ingresada \\ ".
# La impresión de la matriz debe realizarse utilizando el formato de matriz, tal y
# como se muestra en el ejemplo de ejecución al final del enunciado.
#
# Luego se debe mostrar la matriz de elementos pares bajo el título " \\ Matriz Pares \\ ".
# La impresión de la matriz debe realizarse utilizando el formato de matriz, tal y
# como se muestra en el ejemplo de ejecución al final del enunciado.
#
#
# 6) Se debe crear una función que reciba una matriz y verifique que todos los
# elementos de la diagonal principal sean cero. Si se cumple la condición,
# la función devolverá True. En caso contrario, devolverá False.
#
# El nombre de la función es verificar_valores_diagonal y su encabezado
# ya se encuentra declarado a continuación del enunciado.
# No se deben modificar ni el nombre ni los parámetros de la función.
#
# 7) Se debe crear una función que reciba una matriz y devuelva como valor de
# retorno la cantidad de elementos diferentes de cero en su diagonal.
#
# El nombre de la función es contar_no_nulos_diagonal y su encabezado
# ya se encuentra declarado a continuación del enunciado.
# No se deben modificar ni el nombre ni los parámetros de la función.
#
#
# Si se cumple que los elementos de la diagonal son todos nulos,
# mostrar por consola el siguiente mensaje:
#
# " """ Los elementos de la diagonal son todos cero """ ".
#
# En caso de no cumplirse la condición, mostrar el mensaje:
#
# " """ Los elementos de la diagonal no son todos cero, hay x elementos no nulos """ ".
#
# Donde x debe remplazarse por la cantidad de elementos no nulos en la matriz.
#
# Los mensajes deben respetarse tal y como lo solicita el enunciado y como se muestran
# en los ejemplos de ejecución.
#
#
# ******************************************************************************
#
# **** Ejemplo de Ejecución de caso particular 1 ****
#
# Filas y Columnas: 4
#
# Elemento (0,0): 1
# Elemento (0,1): 0
# Elemento (0,2): 5
# Elemento (0,3): 9
# Elemento (1,0): 0
# Elemento (1,1): 15
# Elemento (1,2): 0
# Elemento (1,3): 7
# Elemento (2,0): 0
# Elemento (2,1): 5
# Elemento (2,2): 0
# Elemento (2,3): 86
# Elemento (3,0): 45
# Elemento (3,1): 37
# Elemento (3,2): 10
# Elemento (3,3): 87
#
# \\ Matriz Ingresada \\
#
# 1 0 5 9
# 0 15 0 7
# 0 5 0 86
# 45 37 10 87
#
# \\ Matriz Pares \\
#
# 0 0 0 0
# 0 0 0 0
# 0 0 0 86
# 0 0 10 0
#
#
# """ Los elementos de la diagonal son todos cero """
#
# ******************************************************************************
#
# **** Ejemplo de Ejecución de caso particular 2 ****
#
# Filas y Columnas: 2
#
# Elemento (0,0): 2
# Elemento (0,1): 3
# Elemento (1,0): 5
# Elemento (1,1): 9
#
# \\ Matriz Ingresada \\
#
# 2 3
# 9 5
#
# \\ Matriz Pares \\
#
# 2 0
# 0 0
#
#
#
# """ Los elementos de la diagonal no son todos cero, hay 1 elementos no nulos """
#
# -----------------------------------------------------------------------------
#
# ******* Tabla de Corrección *******
#-------------------------------------------------------------------
# - Ingreso y Validación de Datos : 20 puntos.| 10|
#-------------------------------------------------------------------
# - Programa Principal : 15 puntos.| 0|
#-------------------------------------------------------------------
# - Impresión de Resultados y Formato : 20 puntos.| 5|
#-------------------------------------------------------------------
# - Función obtener_matriz_de_pares : 20 puntos.| 5|
#-------------------------------------------------------------------
# - Función verificar_valores_diagonal : 10 puntos.| 10|
#-------------------------------------------------------------------
# - Función contar_no_nulos_diagonal : 10 puntos.| 0|
#-------------------------------------------------------------------
# - Comentarios y Semántica : 5 puntos.| 0|
#-------------------------------------------------------------------
# TOTAL : 100 puntos.| 30|
#-------------------------------------------------------------------
#
#
# ******************************************************************************
# Definición de Funciones
def obtener_matriz_de_pares(mat):
return
def verificar_valores_diagonal(mat) :
return
def contar_no_nulos_diagonal(mat) :
return
# Programa Principal
# ...complete el codigo a
Por Alvaro el 07 de Julio de 2016
Para definirlo:
Array = []
para llenarlo:
Array.append([1,"a",nombre_de_alguna_variable,"5"]) (nota que son "4 columnas" y como ven puede contener datos de diferente tipo, incluso variables)
para leerlo:
print Array[0] ->imprime el primer renglon completo
print Array[0][x] -> imprime el elemento del primer renglon en la columna x
Por averno666 el 06 de Agosto de 2017