clo*_*vis 6 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)
Run Code Online (Sandbox Code Playgroud)
使用scipy获取变化系数,使用np.argmax获取最大行。您可以对变化函数使用轴参数来计算沿行或列的最大变化。
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)
Run Code Online (Sandbox Code Playgroud)
由于变异系数是标准偏差与平均值之比,因此可以避免输入变异。
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)
Run Code Online (Sandbox Code Playgroud)
关于 putonspectacles 的回答。
由于变化计算的是有偏差的标准差与平均值的比率,因此将np.var原始 lambda 更改为是有意义的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)
Run Code Online (Sandbox Code Playgroud)