当系数存储在 python 中的 csv 文件中时计算一阶和二阶导数
Calculating first and second derivative when coefficients stored in a csv file in python
我有一个 csv 文件,其中包含大约 1000 个回归结果,如下所示:
x^4_coeff x^3_coeff x^2_coeff x_coeff intercept
10 -.43 0.05 12 298
从第一组系数我得到一个等式:
10x4 -0.43x3 + 0.05x2 + 12x + 298
我想自动计算一阶导数,它将是:
40x3 - 1.29x2 + 0.1x + 12
那我想解这个等式的0并求出所有的根
之后我想得到二阶导数,在这种情况下是:
12x2 - 2.58x + 0.1 并找到此函数的两个根
我想将结果存储在 csv 文件中以进行比较,重点是找出所有 1000 个回归之间是否存在一些共性,以及这些方程的一阶导数和二阶导数的根之间有什么区别.
我没有手动计算根,所以这些值是虚拟的,但希望你能理解要点
_root1 fd_root2 fd_root3 sd_root1 sd_root2
10 20 25 13 15
并对我所有的 1000 个回归结果执行此操作。在 python 中有快速的方法吗?到目前为止我所做的是在 Stata 中生成那 1000 个回归输出(我不太了解),将输出保存到 csv 文件并认为使用 Python.
感谢您的帮助!
这是一个示例脚本,用于计算您拥有的多项式的导数和根。我没有包含 csv reading/writing,因为我不确定您使用的确切格式。
from sympy import Symbol, Poly
# Define symbols
x = Symbol("x")
# Add csv reading here
input_rows = [
[2.234, 0, 0.523, 2.3123, 4.123],
[2, 2, 2, 2, 2]]
output_rows = []
# Iterate over each row
for r in input_rows:
# Create polynomial from coefficients
y = Poly(r, x)
print(y)
# 1st derivative and its roots
y_dx = y.diff(x)
y_dx_roots = y_dx.nroots()
# 2nd derivative and its roots
y_ddx = y_dx.diff(x)
y_ddx_roots = y_ddx.nroots()
# Write results to list of dicts
output_rows.append({
"1st deriv": y_dx.all_coeffs(),
"2nd deriv": y_ddx.all_coeffs(),
"1st deriv roots": y_dx_roots,
"2nd deriv roots": y_ddx_roots})
print(*output_rows, sep="\n")
import pandas as pd
import numpy as np
d = {'coeff1': [2.3, 1], 'coeff2': [-5.3, -8.1], 'coeff3' : [-13.2,-111.2] , 'coeff4':[-5,-12], 'intercept':[150,200]}
df = pd.DataFrame(data=d)
df["root1"] = np.nan
df["root2"] = np.nan
for row in df.index:
p = np.poly1d([df['coeff1'][row], df['coeff2'][row], df['coeff3'][row],df['coeff4'][row], df['intercept'][row]])
# showing only second derivative roots to make the point
df["root1"].loc[row] = p.deriv().deriv().roots.item(0).real
df["root2"].loc[row] = p.deriv().deriv().roots.item(1).real
#print results
print(df)
我有一个 csv 文件,其中包含大约 1000 个回归结果,如下所示:
x^4_coeff x^3_coeff x^2_coeff x_coeff intercept
10 -.43 0.05 12 298
从第一组系数我得到一个等式:
10x4 -0.43x3 + 0.05x2 + 12x + 298
我想自动计算一阶导数,它将是:
40x3 - 1.29x2 + 0.1x + 12
那我想解这个等式的0并求出所有的根
之后我想得到二阶导数,在这种情况下是: 12x2 - 2.58x + 0.1 并找到此函数的两个根
我想将结果存储在 csv 文件中以进行比较,重点是找出所有 1000 个回归之间是否存在一些共性,以及这些方程的一阶导数和二阶导数的根之间有什么区别.
我没有手动计算根,所以这些值是虚拟的,但希望你能理解要点
_root1 fd_root2 fd_root3 sd_root1 sd_root2
10 20 25 13 15
并对我所有的 1000 个回归结果执行此操作。在 python 中有快速的方法吗?到目前为止我所做的是在 Stata 中生成那 1000 个回归输出(我不太了解),将输出保存到 csv 文件并认为使用 Python.
感谢您的帮助!
这是一个示例脚本,用于计算您拥有的多项式的导数和根。我没有包含 csv reading/writing,因为我不确定您使用的确切格式。
from sympy import Symbol, Poly
# Define symbols
x = Symbol("x")
# Add csv reading here
input_rows = [
[2.234, 0, 0.523, 2.3123, 4.123],
[2, 2, 2, 2, 2]]
output_rows = []
# Iterate over each row
for r in input_rows:
# Create polynomial from coefficients
y = Poly(r, x)
print(y)
# 1st derivative and its roots
y_dx = y.diff(x)
y_dx_roots = y_dx.nroots()
# 2nd derivative and its roots
y_ddx = y_dx.diff(x)
y_ddx_roots = y_ddx.nroots()
# Write results to list of dicts
output_rows.append({
"1st deriv": y_dx.all_coeffs(),
"2nd deriv": y_ddx.all_coeffs(),
"1st deriv roots": y_dx_roots,
"2nd deriv roots": y_ddx_roots})
print(*output_rows, sep="\n")
import pandas as pd
import numpy as np
d = {'coeff1': [2.3, 1], 'coeff2': [-5.3, -8.1], 'coeff3' : [-13.2,-111.2] , 'coeff4':[-5,-12], 'intercept':[150,200]}
df = pd.DataFrame(data=d)
df["root1"] = np.nan
df["root2"] = np.nan
for row in df.index:
p = np.poly1d([df['coeff1'][row], df['coeff2'][row], df['coeff3'][row],df['coeff4'][row], df['intercept'][row]])
# showing only second derivative roots to make the point
df["root1"].loc[row] = p.deriv().deriv().roots.item(0).real
df["root2"].loc[row] = p.deriv().deriv().roots.item(1).real
#print results
print(df)