0

I have a problem with use if and else statement in convolution function.

this code return error:

use any() or all()

import matplotlib.pyplot as plt
import numpy as np

def name(y):
  if y<300 :
      print("if")
      fun2=y-6
      return fun2
  else:
      fun2=6-y
      print("else")
      return fun2

y=np.arange(1,1000,1) 
x=np.arange(1,1000,1)
fun1=np.sin(x)
con=np.convolve(fun1,name(y))
plt.plot(con)
plt.show()

how to can i use condition in convolve?

I hope you always good luck. thanks.

shahram
  • 11
  • 3
  • Why do you need both? if `np.all` is `True` than `np.any` is `True` and if `np.any` is good enough `np.all` is redundant. – Guy Oct 20 '22 at 07:21
  • Is `if all(y_i<300 for y_i in y):` what you mean? – bn_ln Oct 20 '22 at 07:22

1 Answers1

0

The name function is called with a numpy array as the parameter. "Is the array less than 300?" isn't meaningful. Are all the items less than 300, np.all? Are any of them less than 300, np.any? My guess is that you want something like:

def name( y ):
    sign = 1 - 2*(y>300)
    return sign * (y-6)

y = np.arange( 290, 310 )
name( y )

# array([ 284,  285,  286,  287,  288,  289,  290,  291,  292,  293,  294,
#        -295, -296, -297, -298, -299, -300, -301, -302, -303])

This uses the boolean result for each item in the array to perform arithmetic and is one way of allowing different treatments for different elements in an array.

Tls Chris
  • 3,564
  • 1
  • 9
  • 24