如何在Python中找到行列的最小/最大值?

1 投票
4 回答
55863 浏览
提问于 2025-04-17 04:46

我在想,怎么才能从一个数据集里找到最小值和最大值呢?这个数据集其实就是一个文本文件,里面有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() 这个函数可以接收一个可选的参数,如果你想用其他字符来分割,比如逗号,也可以这样做。

撰写回答