Saltar al contenido principal

# 3.3: Escalares, Vector y Tensores

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$

( \newcommand{\kernel}{\mathrm{null}\,}\) $$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\id}{\mathrm{id}}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\kernel}{\mathrm{null}\,}$$

$$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$

$$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$

$$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

$$\newcommand{\vectorA}[1]{\vec{#1}} % arrow$$

$$\newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow$$

$$\newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vectorC}[1]{\textbf{#1}}$$

$$\newcommand{\vectorD}[1]{\overrightarrow{#1}}$$

$$\newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}}$$

$$\newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}}$$

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

Las dos entidades matemáticas primarias que son de interés en el álgebra lineal son el vector y la matriz. Son ejemplos de una entidad más general conocida como tensor. El siguiente video da una introducción básica de escalares, vectores y tensores. Está bien si no puedes entender todo este video. Aprenderemos la mayor parte en este curso.

##### Nota

Los términos vectores y tensores pueden llegar a ser bastante confusos. Para los efectos de esta clase, no vamos a usar tanto el término Tensor. En cambio trataremos todo como vectores (más sobre esto más adelante).

from IPython.display import YouTubeVideo
YouTubeVideo("ml4NSzCQobk",width=640,height=360, cc_load_policy=True)

Piense en un escalar como un solo número o variable que es un ejemplo de un tensor de orden 0. Los siguientes son todos los escalares:

$1, \frac{1}{2}, 3.1416 \nonumber$

Definir un escalar en Python es fácil. Por ejemplo

a = 8
a
8

Un vector, por otro lado, es una lista ordenada de valores que normalmente representamos con letras minúsculas. Los vectores son matrices ordenadas de números únicos y son un ejemplo de tensor de primer orden. Los siguientes son todos los vectores:

Vector de fila:$$v = [v_1, v_2, \dots, v_n]$$ aquí$$v_1$$,$$v_2$$,$$\dots$$,$$v_n$$ son números únicos.

$f = [1,2,3,5,8] \nonumber$

Aquí$$f$$ en el ejemplo anterior es un vector de números, y es la forma común en que pensamos en vectores.

Tenga en cuenta que a menudo es más común escribir vecors verticalmente. Estos a menudo se llaman vectores de columna:

Vector de columna:$$v = \begin{bmatrix} v_1 \cr v_2 \cr \vdots \cr v_m \end{bmatrix}$$ aquí$$v_1$$,$$v_2$$,$$\dots$$,$$v_m$$ son números únicos.

## Presentando Vectores en Python

En Python, hay múltiples formas de almacenar un vector. Saber cómo se almacena tu vector es muy importante (especialmente para la depuración). Probablemente la forma más fácil de almacenar un vector es usar una lista, que se crean usando corchetes estándar de la siguiente manera:

f = [1, 2, 3, 5, 8]
f
[1, 2, 3, 5, 8]

Otra forma común de almacenar un vector es usar una tupla.

b = (2, 4, 8, 16)
b
(2, 4, 8, 16)

Puede acceder a un escalar particular en su objeto Python usando su índice. Recuerda que el índice de Python comienza a contar en cero. Por ejemplo, para obtener el cuarto elemento en los vectores f y b, usaríamos la siguiente sintaxis:

print(f[3])
print(b[3])
5
16


Más adelante en este curso, podemos discutir qué formato de datos es mejor (e introducir otros nuevos). En este punto no nos preocupemos demasiado por ello. Siempre puede averiguar el tipo de datos de una variable usando la función type. Por ejemplo:

type(f)
list
type(b)
tuple

Por último, no estoy seguro de si vas a necesitar esto pero recuerda siempre, es fácil convertir de una tupla a una lista y viceversa (esto se llama “casting”):

#Convert tuple to list
b_list = list(b)
b_list
[2, 4, 8, 16]
#Convert list to tuple
f_list = tuple(f)
f_list
(1, 2, 3, 5, 8)

## Tamaño del vector

Un vector se puede utilizar para representar cantidades o valores en una aplicación. El tamaño (también llamado dimensión o longitud) del vector es el número de elementos que contiene. El tamaño del vector determina cuántas cantidades hay en el vector. A menudo nos referimos al tamaño de un vector usando la variable n. Entonces un n-vector tiene n valores. Un vector 3 solo tiene 3 valores.

La función length (len) devuelve el tamaño de un vector en Python:

len(f)
5
len(b)
4

## Vectores Especiales

Los siguientes son vectores especiales con nombres especiales.

Los vectores con un solo 1 y el resto de los valores son cero tienen un nombre especial llamado “Vectores de Unidad Estándar”. El número de diferentes vectores unitarios estándar que hay es igual al tamaño del vector. Por ejemplo, un vector 3 tiene los siguientes vectores unitarios estándar:

$e_1 = \begin{bmatrix} 1 \cr 0 \cr 0 \end{bmatrix}, e_2 = \begin{bmatrix} 0 \cr 1 \cr 0 \end{bmatrix}, e_3 = \begin{bmatrix} 0 \cr 0 \cr 1 \end{bmatrix} \nonumber$

### Cero Vectores

Los vectores con todos los valores de cero también tienen un nombre especial llamado “Zero Vectors”. Normalmente solo usamos un cero para representar el vector cero. Por ejemplo:$$0 = \begin{bmatrix} 0 \cr 0 \cr 0 \end{bmatrix}$$

## Ejemplos

Los vectores se utilizan para representar todo tipo de datos que tienen estructuras. Aquí hay algunos ejemplos simples del libro de texto de Boyd y Vandenberghe:

### Ubicación y desplazamiento

Se puede usar un vector 2 para representar una posición o ubicación en un espacio. El primer valor es la distancia en una dirección (desde el origen) y el segundo valor es la distancia en una dirección diferente. Probablemente la mayoría de los estudiantes son famiares con el sistema de coordenadas cartesianas 2D donde una ubicación puede ser definida por dos valores en las direcciones x e y. Aquí hay un diagrama de dispersión simple en python que muestra el concepto:

%matplotlib inline
import matplotlib.pylab as plt
p1 = [2, 1]
p2 = [1, 3]
p3 = [1, 1]

plt.plot(p1[0],p1[1],'*k')
plt.plot(p2[0],p2[1],'*k')
plt.plot(p3[0],p3[1],'*k')

## Add some labels (offset slightly)
plt.text(p1[0]+0.1,p1[1],'$p_1$')
plt.text(p2[0]+0.1,p2[1],'$p_2$')
plt.text(p3[0]+0.1,p3[1],'$p_3$')

## Fix the axis so you can see the points
plt.axis([0,4,0,4])

## 'Run' this cell to view the plot
(0.0, 4.0, 0.0, 4.0)

### Color

Un vector 3 puede representar un color, con sus entradas dando los valores de intensidad Rojo, Verde y Azul (RGB) (a menudo entre 0 y 1). El vector (0,0,0) representa negro, el vector (0, 1, 0) representa un color verde puro brillante, y el vector (1, 0.5, 0.5) representa un tono de rosa.

La biblioteca matplotlib de Python utiliza este tipo de vector para definir colores. Por ejemplo, el siguiente código traza un punto en el origen del tamaño 10000 (el tamaño del círculo, y el valor no tiene significado exacto aquí) y color c = (0,1,0). Se pueden cambiar los valores para c y s para ver la diferencia.

import warnings
warnings.filterwarnings("ignore")

c = (0, 1, 0)
plt.scatter(0,0, color=c, s=10000);

Solo por diversión, aquí hay una pequeña demostración interactiva que te permite jugar con diferentes vectores de color.

##### Nota

Esta demostración utiliza la biblioteca Python de ipywidgets que funciona por defecto en el cuaderno Jupyter (que está instalado en el MSU jupyterhub)) pero NO en la nueva interfaz de jupyter lab que algunos estudiantes pueden haber instalado en sus computadoras locales. Para obtener este tipo de ejemplos trabajando en jupyter lab se requiere la instalación del plug-in ipywidgets.

%matplotlib inline
import matplotlib.pylab as plt
from ipywidgets import interact, fixed

def showcolor(red,green,blue):
color=(red,green,blue)
plt.scatter(0,0, color=color, s=20000);
plt.axis('off');
plt.show();
return color

color = interact(showcolor, red=(0.0,1.0), green=(0.0,1.0), blue=(0.0,1.0));


Se pueden sumar dos vectores del mismo tamaño sumando los elementos correspondientes, para formar otro vector del mismo tamaño, llamado la suma de los vectores. Por ejemplo:

$\begin{bmatrix} 1 \cr 20 \end{bmatrix} + \begin{bmatrix} 22 \cr -3 \end{bmatrix} = \begin{bmatrix} 23 \cr 17 \end{bmatrix} \nonumber$

### Adición de vectores de Python

Aquí es donde las cosas se ponen complicadas en Python. Si intentas agregar una lista o tupla, Python no hace la adición de vectores como definimos anteriormente. En los siguientes ejemplos, observe que las dos listas se concatena en lugar de agregar por elemento:

## THIS IS WRONG
a = [1, 20]
b = [22,-3]
c = a+b
c
[1, 20, 22, -3]
## THIS IS ALSO WRONG
a = (1, 20)
b = (22,-3)
c = a+b
c
(1, 20, 22, -3)

Para hacer las matemáticas vectoriales adecuadas necesitas usar una función especial (las aprenderemos) o recorrerás la lista. Aquí hay un ejemplo muy simplista:

a = (1, 20)
b = (22,-3)
c = []
for i in range(len(a)):
c.append(a[i] + b[i])
c
[23, 17]

Por diversión, podemos definir esta operación como una función en caso de que queramos usarla más tarde:

def vecadd(a,b):
"""Function to add two equal size vectors."""
if (len(a) != len(b)):
raise Exception('Error - vector lengths do not match')
c = []
for i in range(len(a)):
c.append(a[i] + b[i])
return c
#Lets test it

vecadd(a,b)
[23, 17]

## Multiplicación vectorial escalar

También se puede multiplicar un escalar por un vector, lo que se hace multiplicando cada elemento del vector por el escalar.

$3 \begin{bmatrix} 3 \cr -7 \cr 10 \end{bmatrix} = \begin{bmatrix} 9 \cr -21 \cr 30 \end{bmatrix} \nonumber$

### Multiplicación vectorial escalar en Python

Nuevamente, esto puede ser complicado en Python porque las listas de Python no hacen lo que queremos. Considera el siguiente ejemplo que solo concatena tres copias del vector.

##THIS IS WRONG##
z = 3
a = [3,-7,10]
c = z*a
c
[3, -7, 10, 3, -7, 10, 3, -7, 10]

Nuevamente, para hacer las matemáticas vectoriales adecuadas en Python necesitas usar una función especial (las aprenderemos) o recorreremos la lista.

##### Hacer esto

Ve si puedes hacer una función simple con un bucle para multiplicar un escalar por un vector. Nombra tu función sv_multiplicar y pruébela usando las celdas a continuación:

#put your sv_multiply function here

# 'Run' this cell afterwards to register your sv_multiply function
#Test your function here
z = 3
a = [3,-7,10]
sv_multiply(z,a)

Permítanos usar el siguiente código para probar su functon más a fondo. Tenga en cuenta que esto utiliza la función anchsercheck proporcionada por sus instructores. Por favor revise los Paquetes de Álgebra Lineal Python para obtener instrucciones sobre cómo instalar y usar answercheck.

from answercheck import checkanswer

from answercheck import checkanswer