首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >总结“我”之间的差异

总结“我”之间的差异
EN

Stack Overflow用户
提问于 2017-12-02 16:41:24
回答 2查看 50关注 0票数 0

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

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

代码语言:javascript
复制
[[1]
 [0]
 [0]
 [0]
 [0]
 [0]
 [0]
 [0]
 [0]
 [1]
 [1]
 [0]
 [0]
 [0]
 [0]]

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

代码语言:javascript
复制
[0 0 1 1 1 1 0 1 0 0 0 1 1 0 0]

"f“在while循环中,每次迭代都会发生变化,所以我需要做很多次。我要实现上面的公式,使f中的每个元素从M(C,i)的对应元素中减去,然后取绝对值,并对这些值进行求和。从手工计算,这个值应该是10,所以很明显,我目前的方法是错误的(返回117):

代码语言:javascript
复制
(np.sum(abs(f - M[C,])))

我可能漏掉了一些显而易见的东西,有人能告诉我吗?当我试图循环范围(0,15),我也关闭。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-02 17:15:07

在减法过程中,您希望f广播M。要做到这一点,形状必须兼容。f需要是重塑

代码语言:javascript
复制
f.reshape(-1) - M
代码语言:javascript
复制
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()也能工作。

代码语言:javascript
复制
>>> 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]])
>>>

最后:

代码语言:javascript
复制
>>> np.sum(np.absolute(f.reshape(-1) - M))
30
>>>
票数 1
EN

Stack Overflow用户

发布于 2017-12-02 17:17:12

如果我直接读这个问题,你可以这样做

代码语言:javascript
复制
np.sum(np.abs(f.T - M[C])

例如:

代码语言:javascript
复制
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

要同时获得所有行的结果,可以使用

代码语言:javascript
复制
np.sum(np.abs(f.T - M), axis=1)  # [7, 7, 6, 9, 8, 5, 9, 7]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47610110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档