2013-02-05 3 views
0

매트릭스는 M이고 가정 =행 벡터와 평균 행 벡터의 차이 계산?

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

평균 행 벡터이다 RAV =

I 위의 행렬에서의 각 행 벡터에서 평균 행 벡터 (RAV)을 감산 할
[ 0.3925 0.3875 0.5675 0.425 0.3575] 

(M) 즉 M (i) -rav. 효율적인 방법으로 어떻게 할 수 있습니까?

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

broadcasting 때문에 어떤 작품 :로

답변

1

순수 파이썬에서

>>> [[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 행렬로 변환하거나 변환하는 것은 상당히 비쌉니다.

1

당신이 NumPy와를 사용하는 가정이는 간단하다.

는 일반 목록을 사용하는 경우, 그것은 좀 더 복잡하고 코드가 훨씬 느립니다하지만,이 같은 그것을 수행해야합니다

# 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] 
+0

감사합니다. 그것은 작동합니다. 또 다른 방법은, 어떻게 각 행 vecor를 효율적으로 정상화합니까? i, 각 행 벡터는 각 벡터의 길이로 나누어집니다. – user1964587