La suma de dos matrices $\mathbf{A}_{m \times n}$ y $\mathbf{B}_{m \times n}$ se define como
\begin{equation} \begin{bmatrix} a_{(1,1)} & a_{(1,2)} & a_{(1,3)} \\ a_{(2,1)} & a_{(2,2)} & a_{(2,3)} \\ a_{(3,1)} & a_{(3,2)} & a_{(3,3)} \end{bmatrix} + \begin{bmatrix} b_{(1,1)} & b_{(1,2)} & b_{(1,3)} \\ b_{(2,1)} & b_{(2,2)} & b_{(2,3)} \\ b_{(3,1)} & b_{(3,2)} & b_{(3,3)} \end{bmatrix} = \begin{bmatrix} a_{(1,1)} + b_{(1,1)} & a_{(1,2)} + b_{(1,2)} & a_{(1,3)} + b_{(1,3)} \\ a_{(2,1)} + b_{(2,1)} & a_{(2,2)} + b_{(2,2)} & a_{(2,3)} + b_{(2,3)} \\ a_{(3,1)} + b_{(3,1)} & a_{(3,2)} + b_{(3,2)} & a_{(3,3)} + b_{(3,3)} \end{bmatrix} \end{equation}la matriz resultante $\mathbf{C}_{m \times n}$ es
\begin{equation*} \begin{matrix} c_{(1,1)} = a_{(1,1)} + b_{(1,1)} & c_{(1,2)} = a_{(1,2)} + b_{(1,2)} & c_{(1,3)} = a_{(1,3)} + b_{(1,3)} \\ c_{(2,1)} = a_{(2,1)} + b_{(2,1)} & c_{(2,2)} = a_{(2,2)} + b_{(2,2)} & c_{(2,3)} = a_{(2,3)} + b_{(2,3)} \\ c_{(3,1)} = a_{(3,1)} + b_{(3,1)} & c_{(3,2)} = a_{(3,2)} + b_{(3,2)} & c_{(3,3)} = a_{(3,3)} + b_{(3,3)} \end{matrix} \end{equation*}lo anterior se puede escribir como
\begin{equation*} c_{(?,j)} = a_{(?,j)} + b_{(?,j)} \end{equation*}para $j = 1, 2, 3, \dots , n$
lo anterior se puede escribir como
\begin{equation*} c_{(i,j)} = a_{(i,j)} + b_{(i,j)} \end{equation*}para $i = 1, 2, 3, \dots , m$
function tamaño(a)
return filas, columnas
end function
function comparar_tamaño(a, b)
filas_a, columnas_a = tamaño(a)
filas_b, columnas_b = tamaño(b)
if(filas_a = filas_b and columnas_a = columnas_b)
return True
else
return False
end if-else
end function
function suma(a, b)
if(comparar_tamaño(a, b) = True)
m, n = tamaño(a)
for i=1 to m do
for j=1 to n do
c(i,j) = a(i,j) + b(i,j)
end for
end for
return c
else
mostrar "No se puede sumar"
end if-else
end function
In [1]:
import copy
def tamaño(a):
if(isinstance(a, list)):
return len(a), len(a[0])
def comparar_tamaño(a, b):
filas_a, columnas_a = tamaño(a)
filas_b, columnas_b = tamaño(b)
if((columnas_a == columnas_b) and (filas_a == filas_b)):
return True
else:
return False
def suma(a, b):
if(comparar_tamaño(a, b) == True):
m, n = tamaño(a)
c = copy.deepcopy(a)
for i in range(m):
for j in range(n):
c[i][j] = a[i][j] + b[i][j]
return c
else:
print("No se puede sumar")
In [2]:
a = [[1,2,3],[4,5,6],[7,8,9]]
print(a)
In [3]:
b = [[1,1,1],[2,2,2],[3,3,3]]
print(b)
In [4]:
c = suma(a,b)
print(c)
In [5]:
import numpy as np
def suma1(a, b):
if(a.shape == b.shape):
m, n = a.shape
c = np.zeros((m,n))
for i in range(m):
for j in range(n):
c[i,j] = a[i,j] + b[i,j]
return c
else:
print("No se puede sumar")
In [6]:
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(A)
In [7]:
B = np.array([[1,1,1],[2,2,2],[3,3,3]])
print(B)
In [8]:
C = suma1(A, B)
print(C)
In [9]:
# revisando el resultado
print(A + B)
In [10]:
# revisando posibles errores
suma1(A[:,:2], B)
La mutiplicación de dos matrices $\mathbf{A}_{m \times r}$ y $\mathbf{B}_{r \times n}$ se define como
\begin{equation} \begin{bmatrix} a_{(1,1)} & a_{(1,2)} & a_{(1,3)} \\ a_{(2,1)} & a_{(2,2)} & a_{(2,3)} \\ a_{(3,1)} & a_{(3,2)} & a_{(3,3)} \\ a_{(4,1)} & a_{(4,2)} & a_{(4,3)} \end{bmatrix} \begin{bmatrix} b_{(1,1)} & b_{(1,2)} \\ b_{(2,1)} & b_{(2,2)} \\ b_{(3,1)} & b_{(3,2)} \\ \end{bmatrix} = \begin{bmatrix} \begin{bmatrix} a_{(1,1)} & a_{(1,2)} & a_{(1,3)} \end{bmatrix} \begin{bmatrix} b_{(1,1)} \\ b_{(2,1)} \\ b_{(3,1)} \end{bmatrix} & \begin{bmatrix} a_{(1,1)} & a_{(1,2)} & a_{(1,3)} \end{bmatrix} \begin{bmatrix} b_{(1,2)} \\ b_{(2,2)} \\ b_{(3,2)} \end{bmatrix} \\ \begin{bmatrix} a_{(2,1)} & a_{(2,2)} & a_{(2,3)} \end{bmatrix} \begin{bmatrix} b_{(1,1)} \\ b_{(2,1)} \\ b_{(3,1)} \end{bmatrix} & \begin{bmatrix} a_{(2,1)} & a_{(2,2)} & a_{(2,3)} \end{bmatrix} \begin{bmatrix} b_{(1,2)} \\ b_{(2,2)} \\ b_{(3,2)} \end{bmatrix} \\ \begin{bmatrix} a_{(3,1)} & a_{(3,2)} & a_{(3,3)} \end{bmatrix} \begin{bmatrix} b_{(1,1)} \\ b_{(2,1)} \\ b_{(3,1)} \end{bmatrix} & \begin{bmatrix} a_{(3,1)} & a_{(3,2)} & a_{(3,3)} \end{bmatrix} \begin{bmatrix} b_{(1,2)} \\ b_{(2,2)} \\ b_{(3,2)} \end{bmatrix} \\ \begin{bmatrix} a_{(4,1)} & a_{(4,2)} & a_{(4,3)} \end{bmatrix} \begin{bmatrix} b_{(1,1)} \\ b_{(2,1)} \\ b_{(3,1)} \end{bmatrix} & \begin{bmatrix} a_{(4,1)} & a_{(4,2)} & a_{(4,3)} \end{bmatrix} \begin{bmatrix} b_{(1,2)} \\ b_{(2,2)} \\ b_{(3,2)} \end{bmatrix} \\ \end{bmatrix} \end{equation}la matriz resultante $\mathbf{C}_{m \times n}$ es
\begin{equation*} \begin{matrix} c_{(1,1)} = a_{(1,1)} b_{(1,1)} + a_{(1,2)} b_{(2,1)} + a_{(1,3)} b_{(3,1)} & c_{(1,2)} = a_{(1,1)} b_{(1,2)} + a_{(1,2)} b_{(2,2)} + a_{(1,3)} b_{(3,2)} \\ c_{(2,1)} = a_{(2,1)} b_{(1,1)} + a_{(2,2)} b_{(2,1)} + a_{(2,3)} b_{(3,1)} & c_{(2,2)} = a_{(2,1)} b_{(1,2)} + a_{(2,2)} b_{(2,2)} + a_{(2,3)} b_{(3,2)} \\ c_{(3,1)} = a_{(3,1)} b_{(1,1)} + a_{(3,2)} b_{(2,1)} + a_{(3,3)} b_{(3,1)} & c_{(3,2)} = a_{(3,1)} b_{(1,2)} + a_{(3,2)} b_{(2,2)} + a_{(3,3)} b_{(3,2)} \\ c_{(4,1)} = a_{(4,1)} b_{(1,1)} + a_{(4,2)} b_{(2,1)} + a_{(4,3)} b_{(3,1)} & c_{(4,2)} = a_{(4,1)} b_{(1,2)} + a_{(4,2)} b_{(2,2)} + a_{(4,3)} b_{(3,2)} \end{matrix} \end{equation*}lo anterior puede escribirse como
\begin{equation*} c_{(?,?)} = \sum_{k = 1}^{r} a_{(?,k)} b_{(k,?)} \end{equation*}para $k = 1, 2, 3, \dots , r$
lo anterior puede escribirse como
\begin{equation*} c_{(?,j)} = \sum_{k = 1}^{r} a_{(?,k)} b_{(k,j)} \end{equation*}para $j = 1, 2, \dots , n$
lo anterior puede escribirse como
\begin{equation*} c_{(i,j)} = \sum_{k = 1}^{r} a_{(i,k)} b_{(k,j)} \end{equation*}para $i = 1, 2, 3, 4, \dots , m$
function tamaño(a)
return filas, columnas
end function
function comparar_columnas_filas(a, b)
filas_a, columnas_a = tamaño(a)
filas_b, columnas_b = tamaño(b)
if(columnas_a = filas_b)
return True
else
return False
end if-else
end function
function mutiplicar(a, b)
if(comparar_columnas_filas(a, b) = True)
m, r = tamaño(a)
r, n = tamaño(a)
for i=1 to m do
for j=1 to n do
sumatoria = 0
for k=1 to r do
sumatoria = sumatoria + a(i,k)*b(k,j)
end for
c(i,j) = sumatoria
end for
end for
return c
else
mostrar "No se puede multiplicar"
end if-else
end function
In [11]:
import numpy as np
def comparar_columnas_filas(a, b):
filas_a, columnas_a = a.shape
filas_b, columnas_b = b.shape
if(columnas_a == filas_b):
return True
else:
return False
#Una función más corta
#
#def comparar_columnas_filas(a, b):
# if(a.shape[1] == b.shape[0]):
# return True
# else:
# return False
def multiplicar(a, b):
if(comparar_columnas_filas(a, b) == True):
m, r = a.shape
r, n = b.shape
c = np.zeros((m,n))
for i in range(m):
for j in range(n):
sumatoria = 0
for k in range(r):
sumatoria = sumatoria + a[i,k]*b[k,j]
c[i,j] = sumatoria
return c
else:
print("No se puede multiplicar")
In [12]:
A = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(A)
In [13]:
B = np.array([[13,14],[15,16],[17,18]])
print(B)
In [14]:
C = multiplicar(A,B)
print(C)
In [15]:
# revisando el resultado
print(np.dot(A,B))
In [16]:
# revisando posibles errores
multiplicar(A[:,:2], B)
La transpuesta de $\mathbf{A}_{m \times n}$ se define como
\begin{equation} \begin{bmatrix} a_{(1,1)} & a_{(1,2)} \\ a_{(2,1)} & a_{(2,2)} \\ a_{(3,1)} & a_{(3,2)} \end{bmatrix}^{T} = \begin{bmatrix} a_{(1,1)} & a_{(2,1)} & a_{(3,1)} \\ a_{(1,2)} & a_{(2,2)} & a_{(3,2)} \end{bmatrix} \end{equation}la matriz resultante $\mathbf{B}_{n \times m}$ es
\begin{equation*} \begin{matrix} b_{(1,1)} = a_{(1,1)} & b_{(1,2)} = a_{(2,1)} & b_{(1,3)} = a_{(3,1)} \\ b_{(2,1)} = a_{(1,2)} & b_{(2,2)} = a_{(2,2)} & b_{(2,3)} = a_{(3,2)} \end{matrix} \end{equation*}lo anterior se puede escribir como
\begin{equation*} b_{(?,j)} = a_{(j,?)} \end{equation*}para $j = 1, 2, 3, \dots , m$
lo anterior se puede escribir como
\begin{equation*} b_{(i,j)} = a_{(j,i)} \end{equation*}para $i = 1, 2, \dots , n$
function tamaño(a)
return filas, columnas
end function
function transpuesta(a)
m, n = tamaño(a)
for i=1 to n do
for j=1 to m do
b(i,j) = a(j,i)
end for
end for
return b
end function
In [17]:
def transpuesta(a):
m, n = a.shape
b = np.zeros((n,m))
for i in range(n):
for j in range(m):
b[i,j] = a[j,i]
return b
In [18]:
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(A)
In [19]:
B = transpuesta(A)
print(B)
In [20]:
# revisando el resultado
print(np.transpose(A))
La traza de una matriz $\mathbf{A}_{m \times m}$ se define como
\begin{equation} \begin{bmatrix} a_{(1,1)} & a_{(1,2)} & a_{(1,3)} & a_{(1,4)} \\ a_{(2,1)} & a_{(2,2)} & a_{(2,3)} & a_{(2,4)} \\ a_{(3,1)} & a_{(3,2)} & a_{(3,3)} & a_{(3,4)} \\ a_{(4,1)} & a_{(4,2)} & a_{(4,3)} & a_{(4,4)} \end{bmatrix} = a_{(1,1)} + a_{(2,2)} + a_{(3,3)} + a_{(4,4)} \end{equation}el resultado es
\begin{equation*} \text{tr}(\mathbf{A}) = a_{(1,1)} + a_{(2,2)} + a_{(3,3)} + a_{(4,4)} \end{equation*}puede escribirse como
\begin{equation*} \text{tr}(\mathbf{A}) = \sum_{i=1}^{m} a_{(i,i)} \end{equation*}para $i = 1, 2, 3, 4, \dots, m$
function tamaño(a)
return filas, columnas
end function
function traza(a)
m, n = tamaño(a)
if(m = n)
sumatoria = 0
for i=1 to m do
sumatoria = sumatoria + a(i,i)
end for
return sumatoria
else
mostrar "No es una matriz cuadrada"
end if-else
end function
In [21]:
import numpy as np
def traza(a):
m, n = a.shape
if(m == n):
sumatoria = 0
for i in range(m):
sumatoria = sumatoria + a[i,i]
return sumatoria
else:
print("No es una matriz cuadrada")
In [22]:
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(A)
In [23]:
B = traza(A)
print('tr(A) =', B)
In [24]:
# revisando el resultado
print('tr(A) =',np.trace(A))