Я дам минимальный пример, где я бы создал массивы numpy внутри элементов строки из pandas.DataFrame
.pandas, правильно обрабатывать массивы numpy внутри элемента строки
TL; ДР: см скриншота DataFrame
Этот код находит минимум некоторой функции, с помощью scipy.optimize.brute
, который возвращает минимум, переменные, в которой минимум найдены и два Numpy массивов, на которых он оценил функцию.
import numpy
import scipy.optimize
import itertools
sin = lambda r, phi, x: r * np.sin(phi * x)
def func(r, x):
x0, fval, grid, Jout = scipy.optimize.brute(
sin, ranges=[(-np.pi, np.pi)], args=(r, x), Ns=10, full_output=True)
return dict(phi_at_min=x0[0], result_min=fval, phis=grid, result_at_grid=Jout)
rs = numpy.linspace(-1, 1, 10)
xs = numpy.linspace(0, 1, 10)
vals = list(itertools.product(rs, xs))
result = [func(r, x) for r, x in vals]
# idk whether this is the best way of generating the DataFrame, but it works
df = pd.DataFrame(vals, columns=['r', 'x'])
df = pd.concat((pd.DataFrame(result), df), axis=1)
df.head()
Я ожидаю, что это не так, как я должен делать это и должно, возможно, расширить списки каким-то образом. Как я могу справиться с этим правильным, красивым и чистым способом?
Не уверен, что вопросы подотчетен в своей нынешней форме - то, что вы ожидаете выхода на выглядит как? «Красивая и чистая» может быть очень в глазах смотрящего ... –