2016-06-07 111 views
1

根据用户输入,我有应该计算的函数,numpy.array的平均值或中值。我已经这样写了在numpy中计算一个函数的平均值或中位数

import numpy as np 
... 
if input=='means': 
     return np.mean(matrix, axis=1) 
if input=='median': 
    return np.median(matrix, axis=1) 

但是这看起来有点麻烦。我认为可能有一个标准的numpy函数,它将数组和输入作为输入。我正在考虑类似于R的tapply(X, Y, FUNCTION=Z),其中Z可以是任何类型的功能。但我在docs或Google上找不到任何东西...

  • 在Numpy中是否有这样的事情?
  • 如果没有特定的功能,有人会想到这样做的一个不错的方法 ?

谢谢!

回答

2

如果你输入的字符串mean而不是means,你可以这样做:

return getattr(np, input)(matrix, axis=1) 

这里getattr通话抓住你从numpy的图书馆想要的功能。然后第二组圆括号调用该函数。

+0

不错,我不知道了'getattr',谢谢!是否有理由将轴从1更改为-1? – patrick

+0

这是一个错字。我修好了它。 – farenorth

2

我不认为你需要一些特定于NumPy的东西。

例如:

def myFunc(matrix, func, axis=1): 
    return func(matrix) 

然后,使用的功能:

import numpy as np 

#Create random matrix (10, 10) 
mat = np.random.randint(100, size=(10, 10)) 
print myFunc(mat, np.mean)