变异系数和NumPy

时间:2017-03-12 23:52:37

标签: python numpy scipy

我想创建一个带有两个参数(a, axis=0)的函数,用于计算每个列或行(二维数组)的变异系数,并返回最大的列或行的索引变异系数。

我知道.argmax会返回沿轴的最大值索引,但我不确定在此之后如何继续。

我希望代码能够通过以下测试:

print(np.asscalar(arg_cvmax(b)) is 2)
print(np.asscalar(arg_cvmax(b,1)) is 0)
print(np.asscalar(arg_cvmax(b,axis=1)) is 0)

2 个答案:

答案 0 :(得分:4)

使用scipy获取变异系数,并使用np.argmax获得最大行。您可以使用变量函数的axis参数来计算沿行或列的最大变化。

from scipy.stats import variation 

A = np.random.randn(10, 10)

# max variation along rows of A; 
# rows: axis=0, cols: axis=1

var = variation(A, axis=0)
idmax = np.argmax(var)
print(idmax)

由于变异系数是标准差与均值的比值,因此可以避免输入变异。

A = np.random.randn(10, 10)
cv =  lambda x: np.std(x) / np.mean(x)
var = np.apply_along_axis(cv, axis=0, arr=A)
idmax = np.argmax(var)

答案 1 :(得分:1)

关于putonspectacles的答案。

由于变化计算偏差标准差与均值的比率,因此将原始lambda中的np.var更改为np.std是有意义的。

非统计数据导入版本应如下所示:

A = np.random.randn(10, 10)
cv =  lambda x: np.std(x) / np.mean(x)
var = np.apply_along_axis(cv, axis=0, arr=A)
idmax = np.argmax(var)