簡體   English   中英

如何從Python中的行和列中查找最小值/最大值?

[英]How to find min/max values from rows and columns in Python?

我想知道如何從數據集(基本上是文本文件)中找到最小值和最大值。 它具有50行50列。

我知道我可以設置一個控制循環(特定於循環)以使其讀取每一行和每一列,並確定最小/最大值。 但是,我不確定該怎么做。

我認為行和列需要先轉換為列表,然后再使用split()函數。 我嘗試按以下步驟進行設置,但似乎不起作用:

for x in range(4,50): # using that range as an example
    x.split()
    max(4,50)
    print x

Python的新手。 請原諒我的錯誤。

如果文件包含規則(矩形)矩陣,並且知道文件包含多少行標題信息,則可以跳過標題信息,並使用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)

嘗試這樣的事情:

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()將使用可選參數。

嗯...您確定不在這里適用嗎? ;) 而不管:

您不僅需要拆分輸入行,還需要將文本值轉換為數字。 因此,假設您已將輸入行讀入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()而不會感到內。

這對您有用嗎?

infile = open('my_file.txt', 'r')
file_lines = file.readlines(infile)

for line in file_lines[6:]:
    items = [int(x) for x in line.split()]
    max_item = max(items)
    min_item = min(items)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM