Python 如何将Numpy数组传递到只需要一个参数的lambda函数中?

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]

我试图在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]),
                          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
成为标量。我对不熟悉e> ss.johnsonsu.expect
,但如果您尝试不同的范围或其他参数,则通常
quad
调用需要迭代。对于标量函数,它只能处理一个范围。完全回溯错误。您/我们需要确切地知道是什么操作产生了此错误。看起来它正在测试
ub
是否更大比
lb
。但是您将
lb
设置为数组:
lb=A[:,0]/b,
quad
的边界必须是标量,单个值。它不能集成多个边界。谢谢。这是否意味着我必须使用迭代?我是编程新手,所以在为数组中的每个新值更新时,我不知道如何或是否可能使
lb
成为标量。我对不熟悉e> ss.johnsonsu.expect,但如果您尝试不同的范围或其他参数,则通常
quad
调用需要迭代。对于标量函数,它只能处理一个范围。