变异系数

2024-04-18 06:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个带有两个参数(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)

Tags: 函数代码参数isnparg数组print
2条回答

使用scipy获取变化系数,使用np.argmax获取最大行。可以使用variance函数的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)

关于PutonSpecacles的答案。

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

非stats导入版本应如下所示:

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)

相关问题 更多 >