from numpy import *
from matplotlib.pyplot import *
c = 299792458 # m/s
lamda = 643.5 *10**-9 # m
def read_file(filename):
text_array = loadtxt(filename)
time = text_array[:, 0]
obs_lambda = text_array[:, 1]
flux = text_array[:, 2]
return [flux,time,obs_lambda]
def rad_vel(data):
v_r = zeros(len(data[2]))
for i in range(len(data[2])):
v_r = c*(((data[2][i] - lamda))/(lamda))
print v_r
plot(data[1],v_r)
show()
return v_r
test1 = read_file("test.txt")
print test1
当我调用函数时,维度与v_r和时间有所不同。 len(时间)或len(data [2])是一个包含5087个元素的数组,但v_r是标量。无法真正了解v_r是如何标量?
答案 0 :(得分:0)
如果没有文件或模块,我不能尝试这个,但这里有一个使用类。
from numpy import *
from matplotlib.pyplot import *
def readFileData(filename): # Reads file
text_array = loadtxt(filename)
...
flux = ... # array read from .txt
time = ... # array read from .txt
obs_lambda = ... # array read from .txt
return [flux,time,obs_lambda]
def rad_vel(data): # Finds radial velocity
for i in range(len(data[2])):
v_r = data[2][i] - 2
plot(data[1],v_r)
show()
return v_r
textData=readFileData("test.txt")
print(rad_vel(textData))
答案 1 :(得分:0)
如果我理解正确,也许这就是你想要的。我想你想要一个辅助功能
def read_file(filename): # Reads file
def rad_vel(flux,time,obs_lambda): # Finds radial velocity
# should you declare v_r in here?
v_r = 0
for i in range(len(obs_lambda)):
v_r = obs_lambda[i] - 2
plot(time,v_r)
show()
return v_r
text_array = loadtxt(filename)
...
flux = ... # array read from .txt
time = ... # array read from .txt
obs_lambda = ... # array read from .txt
return rad_vel(flux,time,obs_lambda)
答案 2 :(得分:0)
除了其他值之外,您还必须返回内部函数
return [rad_vel,flux,time,obs_lambda]
test1 = read_file("test.txt")
test1[0]('test.txt')