2015-09-18 225 views
-1

我有一個numpy數組(在這種情況下是矩陣),它至少有100行和10列。其中一些列包含數值和我想找到這些列如何使用python numpy在特定列中查找最大值和最小值?

這裏的最大值和最小值是一個列的例子:

101761 
152855 
99894 
412379 
256263 
95917 
122971 
368797 
194538 
194200 
132870 
333158 
469056 
166988 
113323 
138107 

是否有使用在Python/numpy的任何方式我可以計算一個特定列的最大值和最小值?

****** EDIT ******

這裏是我努力工作的實際陣列 -

array([['"13316"', '26', '" Private"', '152855', '" HS-grad"', '9', 
    '" Never-married"', '" Exec-managerial"', '" Own-child"', 
    '" Other"', '" Female"', '0', '0', '40', '" Mexico"', '" <=50K"'], 
    ['"28750"', '50', '" Self-emp-not-inc"', '99894', '" 5th-6th"', '3', 
    '" Never-married"', '" Tech-support"', '" Not-in-family"', 
    '" Asian-Pac-Islander"', '" Female"', '0', '0', '15', 
    '" United-States"', '" <=50K"'], 
    ['"30619"', '35', '" Private"', '412379', '" HS-grad"', '9', 
    '" Never-married"', '" Other-service"', '" Not-in-family"', 
    '" White"', '" Female"', '0', '0', '40', '" United-States"', 
    '" <=50K"'], 

的一些屬性都是數字和一些不是。我已經使用np.genfromtxt加載了文件中的數據,並將dtype指定爲None。我試圖在這些特定列上使用numpy.amaxamin,但無濟於事。我意識到這可能是因爲它們被加載爲字符串,也許我必須在這樣做之前將它們排版爲int。我也嘗試過,而且似乎也失敗了。對此有何想法?

+0

正如我在細節中編輯過的,我確實意識到這可能是因爲它們是作爲字符串加載的。我曾嘗試使用'np.astype'將它們排版爲整數。但即使在那之後,amax和amin也沒有工作。 –

+0

我想你可能會考慮使用'pandas'庫,它會讓你的生活更輕鬆。或者,使用[numpy結構數組]查找(http://docs.scipy.org/doc/numpy/user/basics.rec.html)。 如果您發佈了一個您正在使用的.csv示例,我可以告訴你如何去做。 – areuexperienced

回答

0

這裏是一個醜陋但工作的解決方案,如果我理解正確的話您的問題:

import numpy as np 
# data : first two lines of your example 
A = np.array([['"13316"', '26', '" Private"', '152855', '" HS-grad"','9', 
       '" Never-married"', '" Exec-managerial"', '" Own-child"', 
       '" Other"', '" Female"', '0', '0', '40', '" Mexico"', 
       '" <=50K"'], 
       ['"28750"', '50', '" Self-emp-not-inc"', '99894', '"5th-6th"', '3', 
'    " Never-married"', '" Tech-support"', '" Not-in-family"', 
       '" Asian-Pac-Islander"', '" Female"', '0', '0', '15', 
       '" United-States"', '" <=50K"']]) 

# extract an array containing only the columns of numbers : 
numbers_columns = [0, 1, 3, 5, 11, 12, 13] 
B = A[:, numbers_columns] 
# remove the extra double quotes for each element of B : 
C = [[b.replace('\"', '') for b in line] for line in B ] 
# set as a numpy array and convert to np.int : 
D = np.array(C).astype(np.int) 

現在你只包含數字的numpy的陣列。列的最小值和最大值我可以簡單地發現:

np.min(D[:, i]) 
np.max(D[:, i]) 

PS:我affraid這個解決方案是非常不雅,但我想不出更好的東西。我建議你改進閱讀數據的方式,以防止這個問題。

+0

我會試試這個,謝謝! –

相關問題