2

我有一个将 (u,v) 转换为 (s,d) 的 Python 代码:

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)?谢谢!

4

3 回答 3

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))
于 2012-05-02T02:33:46.117 回答
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)
于 2012-05-02T02:39:03.887 回答
0

我可以想象两种方法:

  1. 将每个文件中的所有数据读取到两个单独的列表中。遍历两个列表并计算每个值,直到到达其中一个列表的末尾。
  2. 一次从每个文件中读取一行。计算您正在寻找的值。重复直到你用尽了这两个文件。

第一点的优点是可以保存数据以供后续使用(如果需要),而无需再次打开和读取文件。如果文件中有非常大的数据集,这可能根本无法正常工作。

如果您只需要在程序中使用一次数据,那么第二点的好处是可以节省一些内存。如果您需要一遍又一遍地使用数据,这可能会更慢。

第一种方式可能如下所示:

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 想出的。

于 2012-05-02T02:48:38.453 回答