1. ホーム
  2. python

[解決済み] 変動係数とNumPy

2022-02-12 14:11:18

質問事項

次の2つの引数を持つ関数を作成したい。 (a, axis=0) 各列または行 (2次元配列) の変動係数を計算し、変動係数が最大となる列または行のインデックスを返すもの。

私は、以下のことを理解しています。 .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)

解決方法は?

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)

変動係数は平均値に対する標準偏差の比なので、変動を取り込まないようにすればよい。

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)