Python 如何将Numpy数组传递到只需要一个参数的lambda函数中?
我试图在numpy数组的第一列上使用scipy.stats.johnsonsu.expect()函数,但expected value函数包含numpy数组中的值:Python 如何将Numpy数组传递到只需要一个参数的lambda函数中?,python,numpy,scipy.stats,Python,Numpy,Scipy.stats,我试图在numpy数组的第一列上使用scipy.stats.johnsonsu.expect()函数,但expected value函数包含numpy数组中的值: A = [MxN] array of positive floats b = 2 ev_Array = ss.johnsonsu.expect(func=lambda x: (x * b) - A[:,0], args=(dstr_params[0], dstr_params[1]
A = [MxN] array of positive floats
b = 2
ev_Array = ss.johnsonsu.expect(func=lambda x: (x * b) - A[:,0],
args=(dstr_params[0], dstr_params[1]),
loc=dstr_params[-2],
scale=dstr_params[-1],
lb=A[:,0] / b,
ub=upper_bound / b)
我收到这个错误:
Traceback (most recent call last):
File "myfile.py", line 241, in <module>
main()
File "myfile.py", line 214, in main
ev_Array = ss.johnsonsu.expect(func=lambda x: (x * b) - A[:,0],
File "~/.local/lib/python3.8/site-packages/scipy/stats/_distn_infrastructure.py", line 2561, in expect
vals = integrate.quad(fun, lb, ub, **kwds)[0] / invfac
File "~/.local/lib/python3.8/site-packages/scipy/integrate/quadpack.py", line 348, in quad
flip, a, b = b < a, min(a, b), max(a, b)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
回溯(最近一次呼叫最后一次):
文件“myfile.py”,第241行,在
main()
文件“myfile.py”,第214行,主
ev_数组=ss.johnsonsu.expect(func=lambda x:(x*b)-A[:,0],
expect中的第2561行文件“~/.local/lib/python3.8/site packages/scipy/stats/\u distn\u infrastructure.py”
VAL=integrate.quad(fun、lb、ub、**kwds)[0]/invfac
文件“~/.local/lib/python3.8/site packages/scipy/integrate/quadpack.py”,第348行,四元格式
翻转,a,b=b
我可以通过列表上的正常迭代来实现这一点,但我想知道如何传入一个数组,以便输出是一个[Mx1]数组,其值来自.expect(),而在lambda函数中,A在计算期望值时保持不变。对错误进行全面回溯。您/我们需要确切了解产生此错误的操作。看起来它正在测试
ub
大于lb
。但是您将lb
设置为数组:lb=A[:,0]/b,
。quad
的边界必须是标量,单个值。它不能集成多个边界。谢谢。这是否意味着我必须使用迭代?我是编程新手,所以在为数组中的每个新值更新时,我不知道如何或是否可能使lb
成为标量。我对quad
调用需要迭代。对于标量函数,它只能处理一个范围。完全回溯错误。您/我们需要确切地知道是什么操作产生了此错误。看起来它正在测试ub
是否更大比lb
。但是您将lb
设置为数组:lb=A[:,0]/b,
。quad
的边界必须是标量,单个值。它不能集成多个边界。谢谢。这是否意味着我必须使用迭代?我是编程新手,所以在为数组中的每个新值更新时,我不知道如何或是否可能使lb
成为标量。我对quad
调用需要迭代。对于标量函数,它只能处理一个范围。