2017-12-02 149 views
0

我試圖總結整個差的差異的「i」根據下面的公式:總結跨越的「i」

formula

其中f是零和一的15X1陣列,它看起來像:

[[1] 
[0] 
[0] 
[0] 
[0] 
[0] 
[0] 
[0] 
[0] 
[1] 
[1] 
[0] 
[0] 
[0] 
[0]] 

和M是8×15矩陣的也零和一,第一行,其中是:

[0 0 1 1 1 1 0 1 0 0 0 1 1 0 0] 

「f」在while循環內,隨着每次迭代而變化,所以我需要做很多次。我想實現上面的公式,以便從M(C,i)的相應元素中減去f中的每個元素,然後取絕對值,然後對這些值求和。從手工計算這個值應該是10,所以很顯然我目前的做法是錯誤的(這將返回117):

(np.sum(abs(f - M[C,]))) 

我可能會丟失一些東西很明顯這裏,任何人都可以提出建議?當我嘗試循環範圍(0,15)時,我也關閉。

+0

嘗試'(np.sum(abs(f.shapepe(f.shape [0]) - M)))'' – wwii

回答

1

在減法過程中,您需要fbroadcast跨越M。要做到這一點,形狀必須兼容。 f必須reshaped

f.reshape(-1) - M 

f = np.random.random_integers(0,1,(15,1)) 
M = np.random.random_integers(0,1,(5,15)) 

>>> f.shape 
(15, 1) 
>>> M.shape 
(5, 15) 

>>> g = f.reshape(-1) 
>>> g.shape 
(15,) 
>>> g 
array([1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0]) 
>>> g - M 
array([[ 0, 1, 0, 0, -1, 1, 0, -1, -1, 0, 0, -1, 1, 0, 0], 
     [ 0, 1, 1, 0, -1, 1, 0, 0, -1, 1, 0, 0, 0, 0, -1], 
     [ 0, 1, 0, -1, -1, 1, 0, 0, 0, 0, 0, -1, 0, 0, -1], 
     [ 1, 0, 0, -1, 0, 0, 1, -1, -1, 1, 0, -1, 0, 0, 0], 
     [ 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0]]) 
>>> 

.ravel()也適用。

>>> f.ravel() 
array([1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0]) 
>>> f.ravel() - M 
array([[ 0, 1, 0, 0, -1, 1, 0, -1, -1, 0, 0, -1, 1, 0, 0], 
     [ 0, 1, 1, 0, -1, 1, 0, 0, -1, 1, 0, 0, 0, 0, -1], 
     [ 0, 1, 0, -1, -1, 1, 0, 0, 0, 0, 0, -1, 0, 0, -1], 
     [ 1, 0, 0, -1, 0, 0, 1, -1, -1, 1, 0, -1, 0, 0, 0], 
     [ 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0]]) 
>>> 

最後:

>>> np.sum(np.absolute(f.reshape(-1) - M)) 
30 
>>> 
1

如果我直接讀取的問題,你可以不喜歡

np.sum(np.abs(f.T - M[C]) 

例如:

import numpy as np 
np.random.seed(0) 
f = np.random.choice([0, 1], (15, 1)) 
M = np.random.choice([0, 1], (8, 15)) 
C = 0 
np.sum(np.abs(f.T - M[C])) # 7 

要獲得所有行的結果一次,你可以使用

np.sum(np.abs(f.T - M), axis=1) # [7, 7, 6, 9, 8, 5, 9, 7]