No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12 Días
1 Hrs
30 Min
41 Seg

Funciones seccionadas

10/18
Recursos

Aportes 75

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

mi forma favorita de implementar esto es:

import numpy as np

def f(x):
    # np.int0 es un cast a números enteros
    return np.int0(x >= 0) 

Según yo así:

def f(x):
  return np.absolute(x)

x = np.linspace(-10,10, num=1000)

y=f(x)

plt.plot(x, y)

Así lo hice yo 🤔

Dejo una lectura adicional de las funciones seccionadas acá

Información resumida de esta clase
#EstudiantesDePlatzi

  • Las funciones seccionadas son funciones que se comportan de manera diferente dependiendo de los trozos o secciones

  • Las funciones seccionadas se definen H (x)

  • enumerate es una función en Python que nos permite tener el índice y el elemento de un arreglo

  • Existen muchas funciones seccionadas

  • La función real valor absoluto se define sobre el conjunto de todos los números reales asignando a cada número real su respectivo valor absoluto

este es el aporte del reto>

![](

#Valor absoluto:

def f(x):

    lista = []

    for value in x:
        if value > 0:
            value = value
            lista.append(value)

        elif value < 0:
            value = value*-1
            lista.append(value)

        else:
            value = 0
            lista.append(value)
    
    return lista

N = 1000
x = np.linspace(-10,10,num=N)
y = f(x)

fig, ax = plt.subplots()
ax.plot(x,y)
ax.grid()

Tambien se puede hacer con np.absolute

Hay una función muy interesante llamada “sigmoide”. La función que representa una sigmoide es la siguiente:

f(x) = (1 + e^(-x))^(-1)

Donde e es el número de Euler.

Esta función tiene propiedades muy interesantes. Por ejemplo, se puede demostrar que su derivada es igual a:

f’(x) = f(x)*[1 - f(x)]

Pero lo que quiero resaltar es su comportamiento, el cual es muy similar al de la función escalón de Heaviside, ya que solo toma valores entre 0 y 1, es decir, su rango es (0, 1).

Esta función es muy usada cuando se trabaja con redes neuronales.

Si quieren implementar la función sigmoide en Python, aquí les dejo el código:

import numpy as np

def f(x):
    return (1 + np.exp(-x))**(-1)

Así se ve la gráfica de la función:

La gráfica de la función H(x) que se realizo en google colab en el minuto 7:30 no es la más precisa en términos matemáticos, el segmento de recta vertical no debe ir en la gráfica, es solo un detalle pero no menos importante.

Escalón de Heaviside, siguiendo la metodolia de las anteriores

def H(x):

    lista = []

    for value in x:
        if value >= 0:
            value = 1
            lista.append(value)
        else:
            value = 0
            lista.append(value)

    return lista

N = 1000
x = np.linspace(-10,10,num=N)
y = H(x)

fig, ax = plt.subplots()
ax.plot(x,y)
ax.grid()

Esta clase es un preambulo de lo que podemos ver en una función logistica para modelos de ML para regresiones logísticas. Importante repasar bien esta clase.

La función escalón se ocupa en redes neuronales

Así realice la solución al problema propuesto

def Abs_value(x):
    Y=np.zeros(len(x))
    for idx,x in enumerate(x):
        if x >= 0:
            Y[idx]=x
        else:
            Y[idx]=-x
    return Y

A=1000
x=np.linspace(-5, 5, num=A)
y=Abs_value(x)

fig,ax = plt.subplots()
ax.plot(x,y)
ax.grid(linestyle='--')
plt.title("Funciones a trozos - Valor Abs")

![](

Sé que se puede utilizar la función abs() para hacerlo de forma más fácil pero definiendo una función absoluta como una función seccionada sería así.

def f(x):
    y = np.zeros_like(x)
    for i,v in enumerate(x):
        if v < 0:
            y[i] = -v
        elif v >= 0:
            y[i] = v
    return y
    
x = np.linspace(-10,10, num=100)
y = f(x)
plt.plot(x,y)

Según yo, así funciona para sacar la gráfica de la función de valor absoluto. Si estoy bien o mal, muchas gracias por los comentarios y tomaré nota.

def Abs(x):
  Y = np.zeros(len(x))
  for idx,x in enumerate(x):
    if x<0:
      Y[idx]=x*-1
    else:
      Y[idx]=x
  return Y
    

N=1000

x = np.linspace(-10,10, num=N)

y = Abs(x)

plt.plot(x,y)
HOLA TAMBIEN TE ESTA COSTANDO ENTENDER EL Errror de ambiguedad en el codigo aca te lo explico. lo que esta pasando es que inicialmente se esta intentando comparar un numero (escalar) con un arreglo de numeros (vector), si a ti te pidieran hacerlo como lo harias? EXACTO ese es el meoyo del asunto, entonces el arreglo es cambiar la forma en la que se hace la comparacion dato por dato para cada dato del arreglo x y pues Y se construye llena de ceros desde antes de la comparacion porque para llenarla con los resultados tenemos que tenerla ya definida con un tamaño fijo, asi funcionan los arreglos en numpy, que le vamos a hacer .
`def H(x):    ` `return 0 if x < 0 else 1`
\# Valor absoluto de un número positivo numero1 = 5 resultado1 = abs(numero1) print(f"El valor absoluto de {numero1} es {resultado1}") \# Valor absoluto de un número negativo numero2 = -7 resultado2 = abs(numero2) print(f"El valor absoluto de {numero2} es {resultado2}") \# Valor absoluto de cero numero3 = 0 resultado3 = abs(numero3) print(f"El valor absoluto de {numero3} es {resultado3}")
```python def f(x): xcopy = x.copy() for index in range(len(xcopy)): if xcopy\[index] < 0: xcopy\[index] = -xcopy\[index] return xcopy N=1000 x = np.linspace(-10,10, num=N) y = f(x) plt.plot(x,y,label=r'$f(x)=|x|$') plt.grid() plt.title(r'Función Seccionada $f(x)=|x|$',fontsize=23) plt.xlabel(r'$x$',fontsize=18) plt.ylabel(r'$f(x)$',fontsize=18) plt.legend() plt.show() ``` ![](https://static.platzi.com/media/user_upload/image-5c50d713-61ac-47b6-af03-b71a69f85bad.jpg)
Aquí esta mi apunte de esta clase en GitHub: <https://github.com/DensLopez/Funciones_matematicas/blob/main/codes/pdfs/code009.pdf> Y también mi repositorio a este curso: <https://github.com/DensLopez/Funciones_matematicas>
`def h(x):` ` return np.intp(x >= 0)` Encontre esta manera de hacerlo
Esta es mi observacion frente a una funcion seccionada vs una funcion algebraica: Una función seccionada se diferencia de cualquier otra porque ella se comporta de diferentes maneras claras y abruptas dependiendo del valor que ella misma evalué, generando una clara diferencia entre una función lineal donde esta función lineal independientemente de los valores que tomé esta función su comportamiento siempre será lineal. la clave que entiendo es que, la razón por la cual es una función seccionada es que por cada valor que pasa, esta función se comporta de una manera brusca generando picos claros de modificación de su comportamiento. por otro lado, una función por ejemplo lineal, independientemente de los valores que tome siempre va a ser lineal, por ejemplo.
Gafico `# Definir el rango de valores xx = np.linspace(-10, 10, 100)# Calcular los valores de la función valor absolutoy = np.abs(x)` `# Graficar la función valor absolutoplt.plot(x, y)` `# Etiquetas de los ejes y títuloplt.xlabel('x')plt.ylabel('|x|')plt.title('Gráfico de la función valor absoluto')` `# Mostrar la cuadrículaplt.grid(True)` `# Mostrar el gráficoplt.show()`
Quise practicar con un ejemplo usando list comprenhension. Cualquier valor definido `a` para el `eje_y` usando `full()` y superponiendo los datos. ```python def f(k): Y = [(val+2) if val <= 2 else (val**2)-4 for val in k] return np.array(Y) k = np.linspace(-5,5, num=100) L = f(k) fig, ax = plt.subplots(figsize=(8,8)) ax.plot(k,L, color='#00CC00', ) ax.axhline(color='k') ax.axvline(color='k') ax.grid() plt.show() ``` ![](https://static.platzi.com/media/user_upload/image-ffdd116e-79ee-4239-bd10-a296e6238b23.jpg)
Una forma mas complicada. Utilizando Visual Studio: ![](https://static.platzi.com/media/user_upload/image-ddafb75e-7f77-4cc0-b038-344f476ff7b1.jpg) ![](https://static.platzi.com/media/user_upload/image-b84db7fb-2ac1-4b28-978a-c2aea65f791e.jpg)

Interesante el desarrollo de funciones seccionada. Ma el reto de valor absolute. Era casi el mismo valor solo que con numpy se cambia el valor a absolute.
![](

def f(x):     return abs(x) x=np.linspace(-10,10,1000)y =f(x) plt.plot(x,y)plt.grid()plt.show()
Esta clase se sintió demasiado improvisada con todos los errores al momento de escribir el código. Eso hace perder la atención del tema. Da la sensación de que no se hubiera preparado la clase antes de grabarla. Debería tener el código antes de la clase para que al escribirla, la explicación sea mas fluida y menos errática.
En una parte del curso veremos funciones de activacion

Esta fue mi forma de resolverlo, sin embargo, he notado que numpy tiene una función especifica para esto jajaja

Por cierto, un dato curioso, si escriben un “;” despues del comando para graficar no será necesario escribir la linea de codigo “plt.show()”

def f(x):
  Y = np.zeros(len(x))
  for index, x in enumerate(x):
    if x < 0:
      Y[index] = x * -1
    elif x > 0:
      Y[index] = x
  return Y

x = np.linspace(-10,10, num=1000)
y = f(x)

plt.plot(x,y);
```js def abs(x): Y = np.zeros(len(x)) for id,x in enumerate(x): if x < 0: Y[id] = x*-1 elif x > 0: Y[id] = x return Y N=1000 x = np.linspace(-10,10, num=N) y = abs(x) plt.plot(x,y) plt.axhline(0,color='black',linestyle=':') plt.xlim([-5,5]) plt.ylim([-10,10]) plt.show() ```
Un poco largo, pero conservando la facilidad de lectura podría ser `def H(X): ` ` salida = []` ` for x in X:` ` if x >= 0:` ` salida.append(1)` ` else:` ` salida.append(0)` ` return np.array(salida)`
![](https://static.platzi.com/media/user_upload/imagen-5aa7a4b5-0397-4bea-9506-7e77854dc668.jpg)
Otra forma de conseguir la funcion de Heaviside ```js def H(x): return x >=0 ```
Este tipo de funciones es útil en diversas situaciones, y aquí hay algunas aplicaciones comunes: 1. **Ajuste de Datos Irregulares:** * Las funciones seccionadas son útiles cuando se trabaja con conjuntos de datos que exhiben comportamientos distintos en diferentes rangos. Pueden utilizarse para ajustar de manera más precisa una función a datos irregulares. 2. **Interpolación:** * En ciertas aplicaciones, se pueden utilizar funciones seccionadas para interpolar entre puntos conocidos. Cada segmento puede proporcionar una aproximación más precisa del comportamiento local. 3. **Modelado de Fenómenos Físicos Variables:** * En problemas de ingeniería y física, donde los fenómenos pueden cambiar de manera significativa en diferentes condiciones, las funciones seccionadas pueden utilizarse para modelar estos cambios y proporcionar una representación más precisa. 4. **Diseño de Curvas y Gráficos:** * En diseño gráfico y animación, las funciones seccionadas se pueden emplear para crear curvas y formas complejas que están compuestas por segmentos más simples. 5. **Control de Sistemas Dinámicos:** * En ingeniería de control, las funciones seccionadas pueden utilizarse para representar características no lineales de sistemas dinámicos, permitiendo un modelado más preciso y un mejor diseño de controladores. 6. **Programación Lineal y No Lineal:** * En problemas de optimización, las funciones seccionadas pueden ser útiles en modelos lineales y no lineales para representar restricciones o relaciones no continuas de manera más precisa. 7. **Compresión de Datos:** * En técnicas de compresión de datos, las funciones seccionadas pueden utilizarse para aproximar datos complejos de manera más eficiente.

Me encantó que para esta sesión del curso pasaran los apuntes de clase, deberían hacerlo en todas las clases de platzi.

```python xvalues=np.linspace(-10,10,1000) yvalues=[] def step(x): if x>=0: return 1 else: return 0 for x in xvalues: yvalues.append(step(x)) plt.plot(xvalues,yvalues) plt.show() ```xvalues=np.linspace(-10,10,1000) yvalues=\[] def step(x): if x>=0: return 1 else: return 0 for x in xvalues: yvalues.append(step(x)) plt.plot(xvalues,yvalues) plt.show()
Hey dude: ![](https://drive.google.com/file/d/1hlwMUzsc7miCwGfgmc89iUGvLq4AfCxq/view?usp=share_link)
También se podría utilizar el método @np.vectorize para construir la función, y así se puede usar la primera definición que dió.

Función Absoluta

La función absoluta, denotada comúnmente como |x|, es una función que toma un número real x como entrada y devuelve el valor absoluto de ese número como resultado. El valor absoluto de un número es la distancia entre ese número y el cero en la recta numérica, siempre siendo positivo o igual a cero. La función absoluta se puede definir como:

| x | = { x, si x >= 0, -x, si x < 0 }

def f(x):
  return np.absolute(x)

x = np.linspace(-10,10, num=1000)

y=f(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('|x|')
plt.title('Gráfica de la Función Absoluta')
plt.grid(True)
plt.show()

se puede usar esto:

<import numpy as np
import matplotlib.pyplot as plt

def H(x):
    if x < 0:
        return 0
    else:
        return 1

N = 1000
x = np.linspace(-10, 10, num=N)
y = [H(xi) for xi in x]

plt.plot(x, y)
plt.show()
> 

también esto

<y = np.vectorize(H)(x)> 

Mi aporte:

def h(x):
    return 1 * (x >= 0)

x = np.linspace(-10, 10, 1000)
y = h(x)

plt.plot(x, y);

De esta manera se pueden hacer mas “escalones”, simplemente agregando mas condicionales o “secciones” a la función.

def H(x):
  Y = np.zeros(len(x))
  for idx,x in enumerate(x):
    if x > 0 and x < 10:
      Y[idx] = 1
    elif x >10:
      Y[idx] = 2 
  return Y

x = np.linspace(-20,20, num=1000)
y = H(x)

plt.plot(x,y)
plt.grid()

Encontre otra forma de resolver el problema que es vectorizar la funcion con np.vectorize(H)
se los dejo aqui 😃

import numpy as np

def H(x):
    if x < 0:
        return 0
    return 1

N = 1000
x = np.linspace(-10, 10, N)

H_vectorized = np.vectorize(H)  # Vectorizamos la función H

result = H_vectorized(x)  # Aplicamos la función vectorizada a todo el array x
plt.plot(x,result)

Comparto con ustedes la función de Heaviside.
Debemos tomar en cuenta que el segmento de recta vertical no debe ir en la gráfica como lo hace Google Colab en el video.


Yo así le hice, veo que hay muchas formas de hacerlo, no duden en compartir su forma 😃

Función de valor absoluto

Por definición, el valor absoluto de x siempre será mayor o igual que cero y nunca negativo.

def f_abs (x):
  return np.abs(x)

y = f_abs(x)
plt.plot(x,y)
<code> 
def valorab(x):
Y = np.zeros(len(x))
for idx,x in enumerate(x):
	if x < 0:
	Y[idx]=x*-1
else:
	Y[idx]=x
return Y

x = np.linspace(-100,100,num=200)
y = valorab(x)
plt.plot(x,y)

Una forma fácil y rápida para crear el valor absoluto

def f(x):
    return abs(x) 
y=f(x)
plt.plot(x,y)
plt.grid()
plt.axhline(0,color='gray', alpha=0.5 )
plt.axvline(0,color='gray',alpha=0.5 )
plt.show()

Pongo el codigo identico en COLAB y me sale una linea a una altura de 1 siempre 😦

<def f(x):
  Y= np.zeros(len(x))
  for idx, x in enumerate(x):
    if x>=0:
      Y[idx]=x
    else:
      Y[idx]=-x
  return Y
N=1000
x=np.linspace(-10,10,num=N)
y=f(x)    
plt.plot(x,y)> 

Fue confuso el codigo de ejemplo en Google colab.

import numpy as np
import matplotlib.pyplot as plt

N = 1000


def H(x):
    Y = np.zeros(len(x))
    for idx, x in enumerate(x):
        if x >= 0:
            Y[idx]=1
    return Y

x = np.linspace(-10, 10, num=N)
y = H(x)

plt.plot(x, y)
import matplotlib.pyplot as plt
import numpy as np

def f(x):
    Y=np.zeros(len(x))
    for idx, b in enumerate(x):
        if b >= 0:
            Y[idx]=b
        else:
            Y[idx]=-b
    return Y

N=11
x =np.linspace(-10,10, num = N)
y = f(x)
plt.plot(x,y)

3 formas de hacer la función valor absoluto :

  1. la chipi
def f(x):
    return np.abs(x)
    
x=np.linspace(-5,5,150)
plt.plot(x,f(x))
  1. la python de puro
def f(x):
    lista=[]
    for i ,j in enumerate(x):
        if j <0:
            lista.append(j*-1)
        else:
            lista.append(j)
    return lista

x=np.linspace(-5,5,100)
y=f(x)
plt.plot(x,y)

3.con numpy(copia de profe)

def f(x):
    lista=np.zeros(len(x))
    for i ,j in enumerate(x):
        if j <0:
            lista[i]=j*-1
        else:
            lista[i]=j
    return lista

x=np.linspace(-5,5,100)
y=f(x)
plt.plot(x,y)
import matplotlib.pyplot as plt   
import numpy as np                
def f(x):
  return np.absolute(x)
x = np.linspace(-10,10, num=1000)
y=f(x)
fig, ax = plt.subplots()
ax.plot(x,y)
ax.grid(".")
plt.axvline(x=0, color='grey')
plt.axhline(y=0, color='grey')

Para el caso de la primera funcion, lo hice de la siguiente manera:

import numpy as np
import matplotlib.pyplot as plt

def H(x):
    if x<0:
        return 0
    else:
        return 1

x = np.linspace(-10,10,100)

lista = list(map(H,x)) 
y = np.array(lista)

plt.plot(x,y)
plt.grid()
plt.show()

reto

Veámosla en acción para dibujar la función campana de Gauss:

Elegiremos 1000 valores en el intervalo para una distribución normal de media y desviación estándar .

import matplotlib.pyplot as plt
import numpy as np
import math
num_puntos = 1000
x_min = -5
x_max = 5
lista_x = np.linspace(x_min, x_max, num_puntos)

media = 0
desviacion_estandar = 1
factor = 1./(desviacion_estandar*math.sqrt(2*math.pi))
den = 2*desviacion_estandar**2

lista_y = [0]*num_puntos
for i, x in enumerate(lista_x):
    lista_y[i] = factor*math.exp((-(x-media)**2)/den)

plt.plot(lista_x, lista_y)
plt.title('Distribución de Gauss')
plt.xlabel('$x$')
plt.ylabel('$N({},{})$'.format(media, desviacion_estandar))
plt.show()

crea una tira de ceros de la misma longitud que la entrada X y solo cambia a 1 las mismas posiciones en las que X es >=0

Otra forma de hacerlo:

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

def f(x):
  y= x.copy()
  y[y>=0], y[y<0] = 1, 0
  return y

x = np.linspace(-10, 10, num=1000)
y = f(x)

#Graphic
fig = plt.figure()
axes = fig.add_axes([0, 0, 1, 1])
axes.plot(x, y, linewidth=3, color=c_1)
axes.set_title('Función escalón de Headivise\n')
axes.set_xlabel('x')
axes.set_ylabel('y')
fig.set_facecolor(color=c_2)
fig.show()
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
#RETO: FUNCIÓN VALOR ABSOLUTO
#Dos maneras de hacerlo:
#1
def f(x):
  Y = x.copy()
  for idx, num in enumerate(x):
    if num < 0:
      Y[idx] *= -1
  return Y
#2
def f(x):
  y = x.copy()
  y[y<0] *= -1
  return y

x = np.linspace(-10, 10, num=1000)
y = f(x)

#Graphic
sns.set_theme(style='darkgrid')
fig = plt.figure()
axes = fig.add_axes([0, 0, 1, 1])
axes.plot(x, y, linewidth=3, color='#000080')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('Función de valor absoluto\n')
fig.set_facecolor('#AAA662')
fig.show()

algo me dice que nuestro querido teacher se complico un poco.

Pd. es la primera ves que veo estas cosas.

Mi forma de implementar la función de valor absoluto

plt.plot(x, np.absolute(x))

Adicionalmente la clase me sirvió para repasar la función enumerate.

Adjunto mi reto

Reto, parte 1:

.abs(): Lo que hace esta función, como su nombre lo indica, es pasar a su valor absoluto. El valor absoluto es el valor positivo de este (-3 → 3). Cuándo el valor es positivo, se deja positivo (3→3)

Puedes entender más sobre el tema en este Artículo (Está en inglés, aprovecha para practicar tu reading)

def f(x):
    return np.abs(x)

y = f(x)

plt.title('Abs Value')
plt.plot(x,y);
plt.grid()

Mi aporte!

N = 1000
x = np.linspace(-10,10,num=N)

def H(x):
  Y = np.zeros(len(x))
  for idx, x in enumerate(x):
    if x <= 0:
      Y[idx] = -x
    else:
      Y[idx] = x  
  return Y    

plt.plot(x,H(x));

Funciones absolutas

Las Funciones absolutas son aquellas que se encuentran dentro de el valor absoluto es decir tenemos una función algebráica y para que sea una función absoluta esta se tiene que meter dentro de los símbolos del valor absoluto

Mi Código para solucionarlo es este

<code> 

def f(x):
  return abs(4 + 2*x)

n = 1000

x = np.linspace(-10, 10, num=n)

y = f(x)

plt.plot(x,y)
plt.grid()

El resultado de esto es

FUNCIÓN ABSOLUTO

N = 1000

x = np.linspace(-10, 10, num = N)

plt.plot(x, np.absolute(x))
plt.grid()

Dejo mi implementación de la función absoluta

def f(x):
  return np.absolute(x)
N = 1000
x = np.linspace(-10,10,num=N)
y = f(x)

fig, ax = plt.subplots()
ax.plot(x,y)
ax.grid()