Как я могу передать массив Numpy в лямбда-функцию, для которой требуется только один аргумент?

#python #numpy #scipy.stats

#python #numpy #scipy.stats

Вопрос:

Я пытаюсь использовать scipy.stats.функция johnsonsu.expect() работает в первом столбце массива numpy, но функция ожидаемого значения включает значение из массива 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()
  

Я могу сделать это с помощью обычной итерации по списку, но я хотел бы знать, как я могу передать A, чтобы на выходе был массив [Mx1] со значениями из .expect(), в то время как внутри лямбда-функции A поддерживается постоянным при вычислении ожидаемого значения.

Комментарии:

1. Полная обратная трассировка ошибки. Вам / нам нужно точно знать, какая операция вызывает эту ошибку.

2. Похоже, он проверяет, что ub больше, чем lb . Но вы задаете lb значение массива: lb=A[:,0] / b, . Границы для quad должны быть скалярами, одиночными значениями. Он не может интегрироваться для нескольких границ.

3. Спасибо. Означает ли это, что я должен использовать итерацию для этого? Я новичок в программировании, поэтому я не знаю, как и возможно ли lb создать скаляр, обновляя его для каждого нового значения в массиве.

4. Я не знаком с ss.johnsonsu.expect , но обычно quad вызовы требуют повторения, если вы пробуете разные диапазоны или другие параметры. Он может обрабатывать только один диапазон для скалярной функции.