Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正常化Numpy Arange_Python_Numpy_Scipy_Normalize - Fatal编程技术网

Python 正常化Numpy Arange

Python 正常化Numpy Arange,python,numpy,scipy,normalize,Python,Numpy,Scipy,Normalize,我刚刚开始用python编程。我想将各种功能的numpy arange正常化。到目前为止,我的代码是 from numpy import arange from scipy.integrate import quad import matplotlib.pyplot as plt def function_A(x): return -(x-1)*(x-5) def normalize(functionName, numpyRange): print "Inside norma

我刚刚开始用python编程。我想将各种功能的numpy arange正常化。到目前为止,我的代码是

from numpy import arange
from scipy.integrate import quad
import matplotlib.pyplot as plt

def function_A(x):
    return -(x-1)*(x-5)

def normalize(functionName, numpyRange):
    print "Inside normalize"

    min = numpyRange.min()
    max = numpyRange.max()

    print "functionName: ", functionName
    print "min: ", min
    print "max: ", max
    print "quad(functionName, min, max)[0]: ", quad(functionName, min, max)[0]
    print "functionName(numpyRange): ", functionName(numpyRange) 

    print "RIGHT BEFORE RETURN"

    return functionName(numpyRange) / quad(functionName, min, max)[0]

x = arange(1,5.01,0.01)
plt.plot(x, normalize(function_A, x))
plt.show()

print "This should equal unity: ", quad(normalize(function_A, x), x.min(), x.max(), args=(function_A, x))
运行代码时的错误消息是:

Traceback (most recent call last):
  File "forStackExchange3.py", line 33, in <module>
    print "This should equal unity: ", quad(normalize(function_A, x), x.min(), x.max(), args=(function_A, x))
  File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py", line 247, in quad
    retval = _quad(func,a,b,args,full_output,epsabs,epsrel,limit,points)
  File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py", line 312, in _quad
    return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
quadpack.error: First argument must be a callable function.
我仍然能够“输入”我的规范化函数,我的多个打印语句证明了这一点。我尝试过用不同的方法来写给出错误信息的行,但是没有任何运气。任何帮助都将不胜感激。也许我需要重写我的规格化函数,以便正确使用quad?另外,如果有一种更简单的方法来规范python中针对我的特殊情况的函数,请告诉我。

状态:

func:function要集成的Python函数或方法

但是,您传递的第一个参数是一个不可调用的
ndarray
。换句话说,您传递的不是要集成的函数,而是其他此类操作的结果


这是技术上的错误。至于怎么修,我得说我不知道你在问什么。给定范围
y
,可以对其进行规范化。范围
y
可能是对
x
应用某些函数的结果,但这不是重点。因此,您可以构建一个范围规范化器,并将其应用于函数的结果

def function_A(x):
    return -(x-1)*(x-5)

x = arange(1,5.01,0.01)

def normalize(y):
    return y / sum(y)

>> sum(normalize(function_A(x)))
1.0
您还可以构建一个元函数,它接受一个函数并返回一个函数,该函数规范化其结果:

def make_normalized(fn):
    return lambda x: fn(x) / sum(fn(x))
这样,你就可以定义

normalized_function_A = make_normalized(function_A)
只是为了验证:

>> sum(normalized_function_A(x))
1.0

请注意,numpy
arange
与非整数步长不一致。文档建议改为
linspace
>> sum(normalized_function_A(x))
1.0