总结差异" i"

时间:2017-12-02 16:41:25

标签: python numpy

我试图总结不同的差异"我"根据以下公式:

formula

其中f是15x1的0和1数组,如下所示:

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

和M是一个8 x 15矩阵,也是0和1,第一行是:

[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)中循环时,我也是关闭的。

2 个答案:

答案 0 :(得分:1)

在减法期间,您希望在f之间Mbroadcast。要做到这一点,形状必须兼容。 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 :(得分: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]