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