0

行列が M= であるとします。

[[.10, .32, .20, .40, .80], 
 [.23, .18, .56, .61, .12], 
 [.90, .30, .60, .50, .30], 
 [.34, .75, .91, .19, .21]]

平均行ベクトルは rav=

[ 0.3925  0.3875  0.5675  0.425   0.3575]

上記の行列(M)、つまりM(i)-ravの各行ベクトルから平均行ベクトル(rav)を減算したいと思います。効率的な方法でそれを行うにはどうすればよいですか?

4

2 に答える 2

1

純粋な Python で

>>> [[i-j for i,j in zip(m, rav)] for m in M]
[[-0.2925, -0.0675, -0.3675, -0.024999999999999967, 0.44250000000000006], [-0.1625, -0.20750000000000002, -0.007499999999999951, 0.185, -0.2375], [0.5075000000000001, -0.08750000000000002, 0.03249999999999997, 0.07500000000000001, -0.057499999999999996], [-0.05249999999999999, 0.3625, 0.3425, -0.235, -0.1475]]

多数の行列演算を行う場合は、numpy を使用する方が高速です。numpy マトリックスとの間の変換はかなりコストがかかります。

于 2013-02-05T06:11:43.173 に答える
1

numpy を使用していると仮定すると、これは次のように簡単です。

M = np.asarray(M) # make sure M is an array...it presumably would be
rav = np.mean(M, axis=0)
diffs = M - rav

放送のために動作します。

単純なリストを使用している場合、それはもう少し複雑で、コードは非常に遅くなりますが、次のようなものにする必要があります:

# M is a list of num_rows lists of num_cols floats
rav = [sum(row[j] for row in M) / num_rows for j in range(num_cols)]
diffs = [[x - mean_x for x, mean_x in zip(row, rav)] for row in M]
于 2013-02-05T06:08:32.993 に答える