Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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向量化关联的勒让德多项式_Python_Numpy - Fatal编程技术网

Python 用numpy向量化关联的勒让德多项式

Python 用numpy向量化关联的勒让德多项式,python,numpy,Python,Numpy,我想给我的相关勒让德多项式输入一个向量 import scipy.special as sp def f(m,n,x): return sp.lpmn(m,n,x)[0][-1,-1] x=[1,2,3] print f(1,1,x) 输出是 ValueError: z must be scalar. 如何将向量输入到相关的勒让德多项式(如用于拟合和绘图)?使用numpy对函数进行矢量化不起作用: np.vectorize(f(1,1,x)) >>>> Fi

我想给我的相关勒让德多项式输入一个向量

import scipy.special as sp
def f(m,n,x):
    return sp.lpmn(m,n,x)[0][-1,-1]
x=[1,2,3]
print f(1,1,x)
输出是

ValueError: z must be scalar.
如何将向量输入到相关的勒让德多项式(如用于拟合和绘图)?使用numpy对函数进行矢量化不起作用:

np.vectorize(f(1,1,x))

>>>> File "C:\Anaconda\lib\site-packages\scipy\special\basic.py", line 681, in lpmn
raise ValueError("z must be scalar.")

>>>> ValueError: z must be scalar.
将函数作为第一个参数,并返回一个包含原始参数的新函数。当这样称呼时:

np.vectorize(f(1,1,x))
它实际上意味着“使用参数1、1和x调用函数f,将结果作为第一个参数传递给np.vectorize”。你应该做的是装饰你的功能:

@np.vectorize
def f(m, n, x):
    return sp.lpmn(m, n, x)[0][-1, -1]
测试:

In [4]: f(1, 1, [1, 2, 3])
/usr/lib/python3/dist-packages/numpy/lib/function_base.py:1639: RuntimeWarning: overflow encountered in ? (vectorized)
  outputs = ufunc(*inputs)
Out[4]: array([ 0.        ,  1.73205081,  2.82842712])
在这样使用时,必须小心不要将数组值按顺序和度数传递给
f
(m和n),因为它们也将被矢量化,这可能会失败,或发生意外情况:

In [6]: f([1, 2], 1, [1, 2, 3])
 ...
ValueError: operands could not be broadcast together with shapes (2,) () (3,) 

代码> NoMy.VCultType 可以被告知不要通过传递一组位置参数和关键字参数的名称来考虑这些参数:

def f(m, n, x):
    return sp.lpmn(m, n, x)[0][-1, -1]
f = np.vectorize(f, excluded={0, 1}, otypes=[np.float64])
将函数作为第一个参数,并返回一个包含原始参数的新函数。当这样称呼时:

np.vectorize(f(1,1,x))
它实际上意味着“使用参数1、1和x调用函数f,将结果作为第一个参数传递给np.vectorize”。你应该做的是装饰你的功能:

@np.vectorize
def f(m, n, x):
    return sp.lpmn(m, n, x)[0][-1, -1]
测试:

In [4]: f(1, 1, [1, 2, 3])
/usr/lib/python3/dist-packages/numpy/lib/function_base.py:1639: RuntimeWarning: overflow encountered in ? (vectorized)
  outputs = ufunc(*inputs)
Out[4]: array([ 0.        ,  1.73205081,  2.82842712])
在这样使用时,必须小心不要将数组值按顺序和度数传递给
f
(m和n),因为它们也将被矢量化,这可能会失败,或发生意外情况:

In [6]: f([1, 2], 1, [1, 2, 3])
 ...
ValueError: operands could not be broadcast together with shapes (2,) () (3,) 

代码> NoMy.VCultType 可以被告知不要通过传递一组位置参数和关键字参数的名称来考虑这些参数:

def f(m, n, x):
    return sp.lpmn(m, n, x)[0][-1, -1]
f = np.vectorize(f, excluded={0, 1}, otypes=[np.float64])

用numpy矢量化不起作用的确切方式是什么?用numpy矢量化不起作用的确切方式是什么?