我有一个Python代码,可以将(u,v)转换为(s,d):
def d2r(d):
r = d * math.pi / 180.0
return (r)
def r2d(r):
d = r * 180.0 / math.pi
return (d)
def sd2uv(s,d):
r = d2r(d)
u = s * math.sin(r)
v = s * math.cos(r)
return (u,v)
def uv2sd(u,v):
s = math.sqrt((u*u)+(v*v))
r = math.atan2(u,v)
d = r2d(r)
if d < 0:
d = 360 + d
return (s,d)
u数据存储在u.txt中,每行有一个数字; v数据存储在v.txt中,每行也有一个数字。我的问题是如何从这两个文件中提取数据,然后在Python代码中使用它们来打印(s,d)?谢谢!
答案 0 :(得分:3)
我认为应该这样做:
with open('u.txt') as uf, open('v.txt') as vf:
for u,v in zip(uf,vf):
print uv2sd(float(u),float(v))
答案 1 :(得分:0)
from itertools import izip, imap
with open('u.txt') as u_data, open('v.txt') as v_data:
for u,v in imap(float, izip(u_data, v_data)):
print uv2sd(u, v)
答案 2 :(得分:0)
我可以想象两种方法:
第一点具有保存数据以供后续使用(如果需要)而无需打开和放大的优点。再次阅读文件。如果文件中有非常大的数据集,则可能无法正常工作。
如果您只需要在程序中使用一次数据,第二点具有节省一些内存的优点。如果您需要重复使用数据,这可能会更慢。
第一种方式可能如下:
with open('u.txt') as u_file, open('v.txt') as v_file:
u_values = u_file.readlines()
v_values = v_file.readlines()
for u, v in zip(u_values, v_values):
print uv2sd(float(u), float(v))
# We can use u_values and v_values again if we need to now
第二种方式是Akavall和gnibbler想出来的。