总结跨越的“i”

我试图总结整个差的差异的“i”根据下面的公式:总结跨越的“i”

其中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)时,我也关闭。

回答:

在减法过程中,您需要f到broadcast跨越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

>>>

回答:

如果我直接读取的问题,你可以不喜欢

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] 

以上是 总结跨越的“i” 的全部内容, 来源链接: utcz.com/qa/257325.html

回到顶部