2015-09-18 667 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

我会试试这个,谢谢! –