尝试从从其他文件导入的函数中读取数据时出现问题
Problem trying to read data from a function imported from an other file
我是一个菜鸟,正在努力提高我的 python 技能。我正在从事一项任务,其目的可能是教授如何从其他文件访问变量、过程、函数等,作为面向对象编程的“软介绍”。
任务是编写一个函数来读取文件和 return 三个数组,这些数组由与导入文件中的某些元素相对应的数字组成,然后将它们绘制在 matplotlib.pyplot 中以查看一些综合测量在一些迭代过程中发展。
任务中给出的文件(您应该导入和读取的文件)如下所示:
# This program is needed in Problem 6.5 Interpret output from a program.
from math import sin, cos, pi
def f(x):
return sin(x)
def df_approx(f, x, delta_x):
print(delta_x, f(x+delta_x)- f(x))
return (f(x+delta_x)-f(x))/delta_x
#return (f(x+delta_x)-f(x-delta_x))/(2*delta_x)
x = pi/3
for n in range(1, 20):
delta_x = 10**(-n)
calculated = df_approx(f, x, delta_x)
exact = cos(x)
rel_err = abs(calculated - exact)/abs(exact)
abs_err = abs(calculated - exact)
print("delta_x: %e, df_approx: %13.10e, df_exact: %13.10e, abs_error: %e, \
#rel_error: %e, n=%d" % (delta_x, calculated, exact, abs_err, rel_err, n))
并且给定的文件输出如下:
0.1 0.045590188541076104
delta_x: 1.000000e-01, df_approx: 4.5590188541e-01, df_exact: 5.0000000000e-01, abs_error: 4.409811e-02, #rel_error: 8.819623e-02, n=1
0.01 0.004956615757736871
delta_x: 1.000000e-02, df_approx: 4.9566157577e-01, df_exact: 5.0000000000e-01, abs_error: 4.338424e-03, #rel_error: 8.676848e-03, n=2
............................................................................................
delta_x: 1.000000e-19, df_approx: 0.0000000000e+00, df_exact: 5.0000000000e-01, abs_error: 5.000000e-01, #rel_error: 1.000000e+00, n=19
问题是:
除了变量 delta_x
、abs_error
和 n
之外,我还尝试从函数 df_approx
访问数据,并从给定任务的导入文件中访问。不幸的是,我只能访问部分数据,而不是全部。
例如,如果我尝试像这样访问变量 calculated = df_approx(f, x, delta_x)
中的值:
import approx_derivative_sine as apx
approx_values = np.array(apx.calculated)
print(approx_values)
只是 returns 0.0
.
或者如果我尝试像这样访问变量 apx.delta_x
delta_x = apx.delta_x
print(delta_x)
只是 returns 1e-19
.
如果我尝试通过 for 循环访问数据,它也会崩溃,或者 return 与我想要的完全不同,所以故事还在继续。
所以我的问题是
- 当我以正确的方式从其他文件导入时,如何访问我需要的变量?我想要导入文件生成的所有数据,而不仅仅是其中的一部分。
- 如何访问导入文件中 for 循环的所有数据?
这是我到目前为止写的代码
from approx_derivative_sine import df_approx, f, x, delta_x
def read_from_file():
approximation = df_approx(f,x,delta_x)
print(approximation)
read_from_file()
如果有好心人能帮助我解决这个问题,我将不胜感激。
您可以将for循环中产生的所有值存储在list或dict中,并导入使用。单个变量将只保留一个值(最近的一个),因此您必须使用某种类型的容器来存储多个值。
一种方法(示例):
lst = []
for n in range(1, 20):
delta_x = 10**(-n)
calculated = df_approx(f, x, delta_x)
exact = cos(x)
rel_err = abs(calculated - exact)/abs(exact)
abs_err = abs(calculated - exact)
lst.append([delta_x, calculated, rel_arr, abs_err]
然后像这样使用它:
import approx_derivative_sine as apx
for item in apx.lst:
print(item[0], item[1], item[2])
否则,您可以只导入函数定义并在新文件中使用参数调用它来生成值。这是首选方式。
# I am changing function name so that you get it better
from approx_derivative_sine import df_approx as dfa
x = pi/3
for n in range(1, 20):
delta_x = 10**(-n)
calculated = dfa(f, x, delta_x)
exact = cos(x)
rel_err = abs(calculated - exact)/abs(exact)
abs_err = abs(calculated - exact)
print("delta_x: %e, df_approx: %13.10e, df_exact: %13.10e, abs_error: %e, \
#rel_error: %e, n=%d" % (delta_x, calculated, exact, abs_err, rel_err, n))
我是一个菜鸟,正在努力提高我的 python 技能。我正在从事一项任务,其目的可能是教授如何从其他文件访问变量、过程、函数等,作为面向对象编程的“软介绍”。
任务是编写一个函数来读取文件和 return 三个数组,这些数组由与导入文件中的某些元素相对应的数字组成,然后将它们绘制在 matplotlib.pyplot 中以查看一些综合测量在一些迭代过程中发展。
任务中给出的文件(您应该导入和读取的文件)如下所示:
# This program is needed in Problem 6.5 Interpret output from a program.
from math import sin, cos, pi
def f(x):
return sin(x)
def df_approx(f, x, delta_x):
print(delta_x, f(x+delta_x)- f(x))
return (f(x+delta_x)-f(x))/delta_x
#return (f(x+delta_x)-f(x-delta_x))/(2*delta_x)
x = pi/3
for n in range(1, 20):
delta_x = 10**(-n)
calculated = df_approx(f, x, delta_x)
exact = cos(x)
rel_err = abs(calculated - exact)/abs(exact)
abs_err = abs(calculated - exact)
print("delta_x: %e, df_approx: %13.10e, df_exact: %13.10e, abs_error: %e, \
#rel_error: %e, n=%d" % (delta_x, calculated, exact, abs_err, rel_err, n))
并且给定的文件输出如下:
0.1 0.045590188541076104
delta_x: 1.000000e-01, df_approx: 4.5590188541e-01, df_exact: 5.0000000000e-01, abs_error: 4.409811e-02, #rel_error: 8.819623e-02, n=1
0.01 0.004956615757736871
delta_x: 1.000000e-02, df_approx: 4.9566157577e-01, df_exact: 5.0000000000e-01, abs_error: 4.338424e-03, #rel_error: 8.676848e-03, n=2
............................................................................................
delta_x: 1.000000e-19, df_approx: 0.0000000000e+00, df_exact: 5.0000000000e-01, abs_error: 5.000000e-01, #rel_error: 1.000000e+00, n=19
问题是:
除了变量 delta_x
、abs_error
和 n
之外,我还尝试从函数 df_approx
访问数据,并从给定任务的导入文件中访问。不幸的是,我只能访问部分数据,而不是全部。
例如,如果我尝试像这样访问变量 calculated = df_approx(f, x, delta_x)
中的值:
import approx_derivative_sine as apx
approx_values = np.array(apx.calculated)
print(approx_values)
只是 returns 0.0
.
或者如果我尝试像这样访问变量 apx.delta_x
delta_x = apx.delta_x
print(delta_x)
只是 returns 1e-19
.
如果我尝试通过 for 循环访问数据,它也会崩溃,或者 return 与我想要的完全不同,所以故事还在继续。
所以我的问题是
- 当我以正确的方式从其他文件导入时,如何访问我需要的变量?我想要导入文件生成的所有数据,而不仅仅是其中的一部分。
- 如何访问导入文件中 for 循环的所有数据?
这是我到目前为止写的代码
from approx_derivative_sine import df_approx, f, x, delta_x
def read_from_file():
approximation = df_approx(f,x,delta_x)
print(approximation)
read_from_file()
如果有好心人能帮助我解决这个问题,我将不胜感激。
您可以将for循环中产生的所有值存储在list或dict中,并导入使用。单个变量将只保留一个值(最近的一个),因此您必须使用某种类型的容器来存储多个值。
一种方法(示例):
lst = []
for n in range(1, 20):
delta_x = 10**(-n)
calculated = df_approx(f, x, delta_x)
exact = cos(x)
rel_err = abs(calculated - exact)/abs(exact)
abs_err = abs(calculated - exact)
lst.append([delta_x, calculated, rel_arr, abs_err]
然后像这样使用它:
import approx_derivative_sine as apx
for item in apx.lst:
print(item[0], item[1], item[2])
否则,您可以只导入函数定义并在新文件中使用参数调用它来生成值。这是首选方式。
# I am changing function name so that you get it better
from approx_derivative_sine import df_approx as dfa
x = pi/3
for n in range(1, 20):
delta_x = 10**(-n)
calculated = dfa(f, x, delta_x)
exact = cos(x)
rel_err = abs(calculated - exact)/abs(exact)
abs_err = abs(calculated - exact)
print("delta_x: %e, df_approx: %13.10e, df_exact: %13.10e, abs_error: %e, \
#rel_error: %e, n=%d" % (delta_x, calculated, exact, abs_err, rel_err, n))