Ejemplo Python suma_matrices

Iniciado por Meta, 16 Noviembre 2010, 06:33 AM

0 Miembros y 4 Visitantes están viendo este tema.

Meta

Buenas:

Estoy haciendo un ejemplo llamado suma_matrices_4.py de la página 197 que PDF que puedes ver en mi firma abajo.

Código (python) [Seleccionar]
# encoding: utf-8
# Pedimos la dimensión de las matrices,
m = int(raw_input('Dime el número de filas: '))
n = int(raw_input('Dime el número de columnas: '))

# Creamos dos matrices nulas...
A = []
for i in range(m):
    A.append( [0] * n)

B = []
for i in range(m):
    B.append ( [0] * n)

# ...y leemos sus contenidos de teclado.
print 'Lectura de la matriz A'
for i in range(m):
    for j in range(n):
        A[i][j] = float(raw_input('Dame el componente (%d, %d): ' % (i, j)))

print 'Lectura de la matriz B'
for i in range(m):
    for j in range(n):
        B[i][j] = float(raw_input('Dame el componente (%d, %d): ' % (i, j)))


Ahora mismo estoy con Ubuntu 10.10 y Python 2.6.6.

Su resultado es este.
CitarDime el número de filas: 2
Dime el número de columnas: 2
Lectura de la matriz A
Dame el componente (0, 0): 1
Dame el componente (0, 1): 2
Dame el componente (1, 0): 3
Dame el componente (1, 1): 4
Lectura de la matriz B
Dame el componente (0, 0): 5
Dame el componente (0, 1): 6
Dame el componente (1, 0): 7
Dame el componente (1, 1): 8

¿Qué es lo que ocurre exactamente? ¿Qué es la matriz que suma?
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Yeison.Eng

Wow, si que estas de preguntón últimamente pero tranquilo, solo trata de fijarte bien en la pagina siguiente esta la continuación del código, la suma de A y B, es  C.
Fijate bien antes de preguntar. ;D

Meta

#2
JEjeje.

Si no me lo dices no me entero, no lo iba a poner todo junto.

Código (python) [Seleccionar]
# encoding: utf-8
# Pedimos la dimensión de las matrices,
m = int(raw_input('Dime el número de filas: '))
n = int(raw_input('Dime el número de columnas: '))

# Creamos dos matrices nulas...
A = []
for i in range(m):
   A.append( [0] * n)

B = []
for i in range(m):
   B.append ( [0] * n)

# ...y leemos sus contenidos de teclado.
print 'Lectura de la matriz A'
for i in range(m):
   for j in range(n):
       A[i][j] = float(raw_input('Dame el componente (%d, %d): ' % (i, j)))

print 'Lectura de la matriz B'
for i in range(m):
   for j in range(n):
       B[i][j] = float(raw_input('Dame el componente (%d, %d): ' % (i, j)))

#------------------

C =[]
for i in range(m):
   C.append( [0] * n)

# Empieza el cálculo de la suma.
for i in range(m):
   for j in range(n):
       C[i][j] = A[i][j] + B[i][j]

# Y mostramos el resultado por pantalla.
print 'Suma:'
for i in range(m):
   for j in range(n):
       print C[i][j],
   print


Por fin ya entiendo esta parte, ya decía yo que lago no me cuadraba.

Y si, si había leído la siguiente página, no me quedé que continuaba el código.

Gracias por las aclaraciones. Esto de aprender programación Python autodidacta me cuesta lo suyo.

CitarDime el número de filas: 2
Dime el número de columnas: 2
Lectura de la matriz A
Dame el componente (0, 0): 4
Dame el componente (0, 1): 5
Dame el componente (1, 0): 6
Dame el componente (1, 1): 7
Lectura de la matriz B
Dame el componente (0, 0): 4
Dame el componente (0, 1): 5
Dame el componente (1, 0): 6
Dame el componente (1, 1): 7
Suma:
8.0 10.0
12.0 14.0

Ahora estoy haciendo el ejercicio 250) de la página 198. A ver si es tan fácil como la suma.

Por lo que veo es cambiar el + por el -.
Código (python) [Seleccionar]

C[i][j] = A[i][j] - B[i][j]
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Meta

#3
Haciendo la multiplicación del ejercicio 251) he copiado y modificado parte del código del PDF y he puesto esto.

Código (python,40, 41,42,43) [Seleccionar]
# Pedimos la dimensión de las matrices,
p = int(raw_input('Dime el número de filas de A: '))
q = int(raw_input('Dime el número de columnas de A (y filas de B): '))
r = int(raw_input('Dime el número de columnas de B: '))

# Creamos dos matrices nulas...
A = []
for i in range(p):
    A.append( [0] * q)

B = []
for i in range(q):
    B.append ( [0] * r)

# ...y leemos sus contenidos de teclado.
print 'Lectura de la matriz A'
for i in range(p):
    for j in range(q):
        A[i][j] = float(raw_input('Dame el componente (%d, %d): ' % (i, j)))

print 'Lectura de la matriz B'
for i in range(q):
    for j in range(r):
        B[i][j] = float(raw_input('Dame el componente (%d, %d): ' % (i, j)))

# Creamos una matriz nula más para el resultado...

C =[]
for i in range(p):
    C.append( [0] * r)

# Y efectuamos el cálculo del producto.
for i in range(p):
    for j in range(r):
        for k in range(q):
            C[i][j] += A[i][k] * B[k][j]

# Y mostramos el resultado por pantalla.
print 'Multiplicación:'
for i in range(q):
    for j in range(p):
        print C[i][j],
    print


En la multipicación me vuelto loco. Quiero saber si realmente lo hice bien como indica el resultado abajo.

CitarDime el número de filas de A: 2
Dime el número de columnas de A (y filas de B): 2
Dime el número de columnas de B: 2
Lectura de la matriz A
Dame el componente (0, 0): 2
Dame el componente (0, 1): 3
Dame el componente (1, 0): 4
Dame el componente (1, 1): 5
Lectura de la matriz B
Dame el componente (0, 0): 2
Dame el componente (0, 1): 3
Dame el componente (1, 0): 4
Dame el componente (1, 1): 5
Multiplicación:
16.0 21.0
28.0 37.0




Edito:

Le he estado dando vueltas a la cabeza y no consigo saber de donde saca estos resultados.
Multiplicación:
16.0 21.0
28.0 37.0

Quizás no lo entiendo como se hace, antes que nada, quiero saber si son los resultados correctos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

Es que no lees detenidamente las letras! :-(
Citar251 Diseña un programa que lea una matriz y un número y devuelva una nueva matriz: la que resulta de multiplicar la matriz por el número. (El producto de un número por una matriz es la matriz que resulta de multiplicar cada elemento por dicho número.)
M = [[1,2,3],[4,5,1]]
n = 5
M x n = [[5,10,15],[20,25,5]]


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

#5
¿No será con p y q?

Código (python) [Seleccionar]
p = [[1,2,3],[4,5,1]]
q = 5
p * q = [[5,10,15],[20,25,5]]


Aún así no lo entiendo. Voy a leer otra vez bien, bien.

Falta el código nada más de la multiplicación.

Código (python) [Seleccionar]
# Pedimos la dimensión de las matrices,
p = int(raw_input('Dime el número de filas de A: '))
q = int(raw_input('Dime el número de columnas de A (y filas de B): '))
r = int(raw_input('Dime el número de columnas de B: '))

# Creamos dos matrices nulas...
A = []
for i in range(p):
    A.append( [0] * q)

B = []
for i in range(q):
    B.append ( [0] * r)

# ...y leemos sus contenidos de teclado.
print 'Lectura de la matriz A'
for i in range(p):
    for j in range(q):
        A[i][j] = float(raw_input('Dame el componente (%d, %d): ' % (i, j)))

print 'Lectura de la matriz B'
for i in range(q):
    for j in range(r):
        B[i][j] = float(raw_input('Dame el componente (%d, %d): ' % (i, j)))

# Creamos una matriz nula más para el resultado...

C =[]
for i in range(p):
    C.append( [0] * r)

# Y efectuamos el cálculo del producto.
for i in range(p):
    for j in range(r):
        for k in range(q):
            C[i][j] += A[i][k] * B[k][j]

# Y mostramos el resultado por pantalla.
print 'Multiplicación:'


CitarMultiplicar matrices es un poco más difícil que sumarlas (y, por descontado, el operador *
no calcula el producto de matrices). Una matriz A de dimensión p×q se puede multiplicar por
otra matriz B si  ésta es de dimensión q × r, es decir, si el número de columnas de la primera es
igual al número de filas de la segunda. Hemos de pedir, pues, el número de filas y columnas de
la primera matriz y sólo el número de columnas de la segunda.

Supuestamente he creado 2 filas y 2 columnas de esta manera.

Citar[[0, 0], [0, 0]]
[[0, 0], [0, 0]]

Lo se porque puse de prueba esto para ver que me muestra.

Código (python) [Seleccionar]
print A
print B


Al final se me termina rellenándoce las litas A y B de esta manera pero no hace la multiplicación.

Citar[[2.0, 3.0], [4.0, 5.0]]
[[2.0, 3.0], [4.0, 5.0]]

Si hago lo que puse antes de estas manera.
Código (python) [Seleccionar]
# Y mostramos el resultado por pantalla.
print 'Multiplicación:'
for i in range(q):
    for j in range(p):
        print C[i][j],
    print


Me muestra este resultado.
CitarMultiplicación:
16.0 21.0
28.0 37.0

Quiero saber si ese resultado es lo que tiene que dar justo el ejercicio 251) de la página 198.

Muchas gracias.




Edito:


Lo coloco así para que se entienda.

A:
[[2.0, 3.0],
[4.0, 5.0]]

B:
[[2.0, 3.0],
[4.0, 5.0]]

Ni yo me entiendo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

#6
Meta, ¿por que tiene que ser p y q? Le pongo los nombres que quiero :xD Y sigues leyendo mal!

¿En que punto el ejercicio 251 te pide que multipliques dos matrices? Dices que multipliques la matriz por un número, solo tienes que multiplicar cada valor de la matriz por ese número!

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

Por lo que te entiendo.

Código (python) [Seleccionar]
# Pedimos la dimensión de las matrices,
p = int(raw_input('Dime el número de filas de A: '))
q = int(raw_input('Dime el número de columnas de A (y filas de B): '))
r = int(raw_input('Dime el número de columnas de B: '))

# Creamos dos matrices nulas...
A = []
for i in range(p):
    A.append( [0] * q)

B = []
for i in range(q):
    B.append ( [0] * r)

# ...y leemos sus contenidos de teclado.
print 'Lectura de la matriz A'
for i in range(p):
    for j in range(q):
        A[i][j] = float(raw_input('Dame el componente (%d, %d): ' % (i, j)))

print 'Lectura de la matriz B'
for i in range(q):
    for j in range(r):
        B[i][j] = float(raw_input('Dame el componente (%d, %d): ' % (i, j)))

# Creamos una matriz nula más para el resultado...

C =[]
for i in range(p):
    C.append( [0] * r)

# Y efectuamos el cálculo del producto.
for i in range(p):
    for j in range(r):
        for k in range(q):
            C[i][j] += A[i][k] * B[k][j]

# Y mostramos el resultado por pantalla.
print 'Multiplicación:'
#for i in range(q):
#    for j in range(p):
#        print C[i][j],
#    print

print B * r


Código (python) [Seleccionar]
print A
r = 2
print B * r


No, no me sale, entiendo la explicación que me pussite aquí de esta manera pero no logro cuajarlo al mio. Me siento muy torpe, programación no es lo mio.

Código (python) [Seleccionar]
M = [[1,2,3],[4,5,1]]
n = 5
M x n = [[5,10,15],[20,25,5]]


Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

#8
Me doy por vencido ...
Cita de: Novlucker en 17 Noviembre 2010, 11:10 AM
¿En que punto el ejercicio 251 te pide que multipliques dos matrices? Dices que multipliques la matriz por un número, solo tienes que multiplicar cada valor de la matriz por ese número!

Insistes con pedir dos matrices, solo necesitas pedir una :¬¬
Código (python) [Seleccionar]
n = input('Ingresa el lado de la matriz: ')
# Voy a crear una matriz cuadrada

M = [[0 for i in range(n)]for e in range(n)]
# Creo la matriz 'vacia', en realidad la he llenado de ceros
for i in range(n):
# Cargo cada uno de los elementos
   for e in range(n):
       M[i][e] = input('Ingresa el valor para [%i][%i]: '%(i,e))
print M

m = input('Ingresa un numero por el cual multiplicar: ')
for i in range(m):
# Vuelvo a cargar los elementos pero esta vez multiplandolos
   for e in range(m):
       M[i][e] *= m
print M


Lo podrías hacer todo en el mismo bucle (el primero), pero lo he hecho por separado para que lo notes un poco mejor

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

Gracias por la pacienca.

No sabía que puedes meter instrucciones dentro de una matriz como hiciste por aquí.

Código (python) [Seleccionar]

M = [[0 for i in range(n)]for e in range(n)]


:)
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/