为什么我的函数输出是二进制的?

时间:2015-06-15 12:17:34

标签: python numpy matplotlib

我写了一个可区分的Heaviside函数并将其矢量化。但是,输出似乎是奇数和二进制。代码如下:

import numpy as np
import matplotlib.pyplot as plt

def heaviside(x, epis):
    if (x>= epis):
        y=1
    elif (x< -epis):
        y=0;
    else:
        y = 0.5 + x/(2*epis) + np.sin(np.pi*x/epis)/(2*np.pi);

    print (x, y);
    return y;

x1 = np.linspace(-1, 1, 100);
vheaviside = np.vectorize(heaviside);
y1 = vheaviside(x1, 0.2);
plt.plot(x1, y1, 'b', alpha=0.3)
plt.show()

输入是[-1, 1]中的数组,输出应该是连续的Heaviside函数。但是,所有输出都是01。为什么呢?

3 个答案:

答案 0 :(得分:3)

您需要指定float使用vheaviside = np.vectorize(heaviside, [float]) 时应该使用的函数的时间:

heaviside

否则,根据文件:

  

输出类型是通过评估输入的第一个元素

来确定的

在这种情况下是一个整数。或者,请确保y = 1始终返回浮点数,例如, y = 1.0app.js

答案 1 :(得分:1)

使用Numpy定义矢量化Heaviside函数的一种更简单,更有效的方法是使用numpy.piecewise

def heaviside(x, epis):
    return np.piecewise(x, (x>=epis, x<-epis),
             (1, 0, lambda x: 0.5 + x/(2*epis) + np.sin(np.pi*x/epis)/(2*np.pi) ) )

答案 2 :(得分:0)

据我所知,只有不连续的一个。试试这个:

def h(x):
    if x == 0:
        return 0.5

    return 0 if x < 0 else 1
相关问题