如何在Python中找到行列的最小/最大值?
我在想,怎么才能从一个数据集里找到最小值和最大值呢?这个数据集其实就是一个文本文件,里面有50行和50列。
我知道我可以设置一个控制循环(具体来说是用for循环)来逐行逐列地读取数据,然后找出最小值和最大值。但是,我不太确定该怎么做。
我觉得首先需要把行和列转换成列表,然后再用split()
函数。我试着设置了一些代码,但好像没有成功:
for x in range(4,50): # using that range as an example
x.split()
max(4,50)
print x
我刚开始学Python,请多多包涵我的错误。
4 个回答
2
嗯……你确定这里不适合提到作业吗? ;) 不管怎样:
你不仅需要把输入的每一行分开,还需要把文本值转换成数字。所以假设你已经把输入行读入了变量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()
这一步,而不会感到一点内疚。
3
如果文件里有一个普通的(矩形的)矩阵,而且你知道它有多少行是头部信息,那么你可以跳过这些头部信息,使用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)
3
试试这样做:
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() 这个函数可以接收一个可选的参数,如果你想用其他字符来分割,比如逗号,也可以这样做。