A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Operaciones

10/24
Recursos

Aportes 10

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Una operaci贸n muy interesante que encontr茅 es la llamada 鈥渦nique鈥, con esta operaci贸n quitaremos los valores repetidos de nuestro array. Lo mas incre铆ble es que se pueden hacer algunas operaciones extras como lo es 鈥淪abes cuantas veces se repiten dichos datos鈥 (Hay varias operaciones extras que puede retornar).

Algo que debe quedar claro con las operaciones matem谩ticas es que Python no puede resolver directamente al operar un vector o matriz por un escalar. Internamente Python usa algo llamado Broadcasting.

Es importante que esto quede claro, quiz谩 no todos los lenguajes de programaci贸n soporten esto.

Pero que es el broadcasting: Cuando se hace una operaci贸n b谩sica con vectores o matrices, por regla, abos objetos deben tener la misma dimensi贸n, es decir, si tenemos un vector de 5 elementos, y a cada elemento queremos sumar 2, originalmente deberiamos hacer los siguiente:

vector = np.array([1,2,3,4,5])

sumar_2 = np.array([2,2,2,2,2)]

vetor_+_2 = vector + sumar_2

Con esta configuraci贸n cumplimos que ambos vectores deben tener la misma dimensi贸n.

Pero, al usar numpy, no solemos hacer eso, usamos algo como sigue:

vector = np.array([1,2,3,4,5])

vetor_+_2 = vector + 2

Aqu铆 es donde entra la m谩gia del broadcasting, internamente, numpy y python lo que hacen es crear el vector sumar_2 = np.array([2,2,2,2,2)] sin que el usuario se de cuenta, para as铆 poder efectura la operaci贸n.

El mismo proceso sucede con las matrices. Para efectuar operaciones con sus elementos debemos de tener las mismas dimensiones en ambas matrices.

matriz = np.array([[1,2],
                   [3,4]])

sumar_2 = np.array([[2,2],
                   [2,2]])

matriz_+_2 = matriz + sumar_2

Est谩 claro que la anterior operaci贸n se realiza de manera sencilla solo con la operaci贸n matriz += 2 gracias al broadcasting.

Aqu铆 un video

馃敚Operaciones


Existen diferentes operaciones que se pueden usar para los arrays de NumPy.

lista = [1,2]
lista ----> [1, 2]

Una lista de Python entiende que quieres duplicar los datos. Cosa que no buscamos.

lista * 2 ----> [1, 2, 1, 2]
arr = np.arange(0,10)
arr2 = arr.copy()
arr ----> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Ahora multiplicamos por un escalar:

arr * 2 ----> array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

Operaci贸n suma de escalar:

arr + 2 ----> array([ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

Divisi贸n con un escalar
Como en este caso la primera posici贸n del array es 0, muestra un error pero no detiene el proceso.

1/arr
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:1: RuntimeWarning: divide by zero encountered in true_divide
  """Entry point for launching an IPython kernel.
array([       inf, 1.        , 0.5       , 0.33333333, 0.25      ,
       0.2       , 0.16666667, 0.14285714, 0.125     , 0.11111111])

Elevar a un escalar:

arr**2 ----> array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])

Sumar dos arrays de igual dimensiones las hace elemento por elemento:

arr + arr2 ----> array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

Lo mismo aplica para matrices.

matriz = arr.reshape(2,5)
matriz2 = matriz.copy()
matriz
----> array([[0, 1, 2, 3, 4],
      	 [5, 6, 7, 8, 9]])
matriz - matriz2
----> array([[0, 0, 0, 0, 0],
      	 [0, 0, 0, 0, 0]])

Una operaci贸n importante es la de punto por punto, aqu铆 dos formas de hacerla:

np.matmul(matriz, matriz2.T)
----> array([[ 30,  80],
      	 [ 80, 255]])
matriz @ matriz2.T
----> array([[ 30,  80],
       [ 80, 255]])

Para entender por qu茅 se debe utilizar la transpuesta, es importante recordar que el producto punto de dos matrices solo se puede operar si la dimensi贸n de las columnas de la primera es igual a la de las filas de la segunda.

En el ejemplo :

	(2 x  5)      (5 x 2) 
		    ^ _______^

Otro dato es que la matriz resultante queda con dimensiones de las dimensiones que no se usaron, o sea con las filas de la primera y las columnas de la segunda.

Por esto la matriz queda de 2x2.

	(2 x 5)    (5 x 2)
	 ^______________^

Redimensionar matrices a una dimensi贸n haciendo una copia o referencia a la matriz original.
Las funciones flatten() y ravel() redimensionar una matriz a una dimensi贸n.
La diferencia entre ambas es que los elementos de vector resultante con el m茅todo ravel() son referencia de los elementos de la matriz original y en flatten() no.
El m茅todo ravel() es m谩s eficiente en el uso de memoria (m谩s cuando la matrices son de gran tama帽o).
Pero como se coment贸 antes sino se quiere modificar la matriz original: induce a error.

import numpy as np
# MATRIZ 3D 3x3x3 INT 64
matriz3x3x3 = np.array([[[1,2,3], [4,5,6], [7,8,9]],[[11,12,13], [14,15,16],[17,18,19]],[[21,22,23], [24,25,26],[27,28,29]]])
matriz3x3x3

array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[11, 12, 13],
[14, 15, 16],
[17, 18, 19]],
[[21, 22, 23],
[24, 25, 26],
[27, 28, 29]]])

Las funciones flatten() y ravel() redimensionar una matriz a una dimensi贸n.

arrflatten = matriz3x3x3.flatten()
arrravel = matriz3x3x3.ravel()
arrflatten,arrravel

(array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19, 21, 22, 23, 24, 25, 26, 27, 28, 29]),
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19, 21, 22, 23, 24, 25, 26, 27, 28, 29]))

Los elementos del vector flatten son copia de los elementos originales de la matriz.

arrflatten[0] = 99
print (arrflatten)
matriz3x3x3

[99 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26
27 28 29]

array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[11, 12, 13],
[14, 15, 16],
[17, 18, 19]],
[[21, 22, 23],
[24, 25, 26],
[27, 28, 29]]])

Los elementos del vector ravel son una referencia a los elementos originales de la matriz.

arrravel[0] = 99
print (arrravel)
matriz3x3x3

[99 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26
27 28 29]

array([[[99, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[11, 12, 13],
[14, 15, 16],
[17, 18, 19]],
[[21, 22, 23],
[24, 25, 26],
[27, 28, 29]]])

Otra forma de hacer producto punto:

Como algunos ya comentaron, se puede hacer con la funci贸n np.dot(), pero tambi茅n puede ser despu茅s del primer array en la multiplicaci贸n. Como ser ve en el siguiente ejemplo.
*Recordar que el orden de las matrices s铆 importa en la mayor铆a de los casos *

matriz = np.array([[1,2],[3,4]])
matriz2 = matriz.copy()
print(np.matmul(matriz,matriz2.T)==matriz.dot(matriz2.T))
->>>> 
[[ True  True]
 [ True  True]]

My challenge: