我想知道如何从基本上是文本文件的数据集中找到最小值和最大值。它有50行,50列。
我知道我可以设置一个控制循环(具体来说是for loop ),让它读取每一行和每一列,并确定最小/最大值。但是,我不确定该怎么做。
我认为需要先将行和列转换为list,然后再使用split()函数。我尝试按如下方式进行设置,但似乎不起作用:
for x in range(4,50): # using that range as an example
x.split()
max(4,50)
print xPython新手。请原谅我的错误。
发布于 2011-10-22 04:38:20
尝试如下所示:
data = []
with open('data.txt') as f:
for line in f: # loop over the rows
fields = line.split() # parse the columns
rowdata = map(float, fields) # convert text to numbers
data.extend(rowdata) # accumulate the results
print 'Minimum:', min(data)
print 'Maximum:', max(data)请注意,如果您想拆分空格以外的内容(例如逗号),则split()需要一个可选参数。
发布于 2011-10-22 04:35:08
如果文件包含一个规则的(矩形)矩阵,并且您知道它包含多少行标题信息,那么您可以跳过标题信息,并使用NumPy特别容易地做到这一点:
import numpy as np
f = open("file.txt")
# skip over header info
X = np.loadtxt(f)
max_per_col = X.max(axis=0)
max_per_row = X.max(axis=1)发布于 2011-10-22 04:39:59
Hmmm...are您确定homework不适用于此吗?;)不管怎样:
您不仅需要拆分输入行,还需要将文本值转换为数字。因此,假设您已经将输入行读入in_line,您将执行如下操作:
...
row = [float(each) for each in in_line.split()]
rows.append(row) # assuming you have a list called rows
...一旦有了行的列表,就需要获取列:
...
columns = zip(*rows)然后,您可以只迭代调用max()的每一行和每一列:
...
for each in rows:
print max(each)
for eac in columns:
print max(each)编辑:下面是更完整的代码,展示了如何打开文件、遍历文件的各行、关闭文件以及使用上面的提示:
in_file = open('thefile.txt', 'r')
rows = []
for in_line in in_file:
row = [float(each) for each in in_line.split()]
rows.append(row)
in_file.close() # this'll happen at the end of the script / function / method anyhow
columns = zip(*rows)
for index, row in enumerate(rows):
print "In row %s, Max = %s, Min = %s" % (index, max(row), min(row))
for index, column in enumerate(columns):
print "In column %s, Max = %s, Min = %s" % (index, max(column), min(column))编辑:为了新学校的利益,不要使用我的旧的,危险的文件处理。使用新的安全版本:
rows = []
with open('thefile.txt', 'r') as in_file:
for in_line in in_file:
row = ....现在您已经得到了很多保证,即使您在读取文件时抛出异常,也不会意外地做一些不好的事情,比如让文件保持打开状态。此外,您可以完全跳过in_file.close(),而不会感到一点内疚。
https://stackoverflow.com/questions/7854859
复制相似问题