我正试图按照以下公式对“我”的差额进行求和:

其中f是一个由0和1组成的15x1数组,如下所示:
[[1]
[0]
[0]
[0]
[0]
[0]
[0]
[0]
[0]
[1]
[1]
[0]
[0]
[0]
[0]]M是一个8×15矩阵,也是0和1的矩阵,第一行是:
[0 0 1 1 1 1 0 1 0 0 0 1 1 0 0]"f“在while循环中,每次迭代都会发生变化,所以我需要做很多次。我要实现上面的公式,使f中的每个元素从M(C,i)的对应元素中减去,然后取绝对值,并对这些值进行求和。从手工计算,这个值应该是10,所以很明显,我目前的方法是错误的(返回117):
(np.sum(abs(f - M[C,])))我可能漏掉了一些显而易见的东西,有人能告诉我吗?当我试图循环范围(0,15),我也关闭。
发布于 2017-12-02 17:15:07
在减法过程中,您希望f跨广播跨M。要做到这一点,形状必须兼容。f需要是重塑
f.reshape(-1) - Mf = 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
>>>发布于 2017-12-02 17:17:12
如果我直接读这个问题,你可以这样做
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]https://stackoverflow.com/questions/47610110
复制相似问题