Написание быстрой функции (операции с массивами), которая решает функцию в одном столбце, чтобы получить следующее значение функции - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть DataFrame, в котором я хочу определить каждую запись в столбце b, численно решая уравнение, в котором используется соответствующий элемент из столбца a.Например, первая запись, пусть $ a [0] $ и $ b [0] $ будут первыми записями столбца $ a $ и столбца $ b $.$ a [0] $ и функция $ f (x) = e ^ x - a [0] * x ^ 2 $.Я хочу определить $ b [0] $, решая для нуля $ f $.Та же самая функция $ f $ используется для определения $ b [1], b [2] $ и т. Д.

В настоящее время я делаю это для входа, используя scsy's fsolve, через цикл forна записи столбца б.Это работает, но это медленно, и я слышал, что это плохая практика - использовать циклы for для DataFrames.

Буду признателен за любые советы о том, как создать функцию, которая работает быстрее.Заранее спасибо.

1 Ответ

0 голосов
/ 22 февраля 2019

Давайте возьмем случай, когда есть только одно решение, тогда вы можете начать играть с

import pandas as pd
import numpy as np
from scipy.optimize import root

def f(x,a):
    return np.exp(x) - a*x**2

n = 100
df = pd.DataFrame({"a":np.arange(1, n+1)})
df["sol"] = df["a"].apply(lambda a: root(f,x0=0, args=a).x[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...