当前位置: 首页 > 知识库问答 >
问题:

从r中矩阵的每一行减去一个常数向量

谭学名
2023-03-14

我有一个5列4行的矩阵。我还有一个3列的向量。我想在矩阵的每一行分别从第3、4和5列中减去向量中的值。

b <- matrix(rep(1:20), nrow=4, ncol=5)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

c <- c(5,6,7)

得到

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    4    7   10
[2,]    2    6    5    8   11
[3,]    3    7    6    9   12
[4,]    4    8    7   10   13

共有3个答案

诸龙野
2023-03-14

另一种方式,申请:

b[,3:5] <- t(apply(b[,3:5], 1, function(x) x-c))
龙令雪
2023-03-14

也许不是那么优雅,但是

b <- matrix(rep(1:20), nrow=4, ncol=5)
x <- c(5,6,7)

b[,3:5] <- t(t(b[,3:5])-x)

应该做这个伎俩。我们对矩阵进行子集化以仅更改我们需要的部分,并使用 t()(转置)来翻转矩阵,因此简单的向量回收将负责从正确的行中减去。

如果你想避免转置,你可以这样做

b[,3:5] <- b[,3:5]-x[col(b[,3:5])]

也是。这里我们子集两次,我们使用第二个来获取x中每个值的正确列,因为这两个矩阵将以相同的顺序索引。

我认为我最喜欢的是@thelatemail链接的问题

b[,3:5] <- sweep(b[,3:5], 2, x, `-`)
李光华
2023-03-14

这正是sweep的目的:

b <- matrix(rep(1:20), nrow=4, ncol=5)
x <- c(5,6,7)

b[,3:5] <- sweep(b[,3:5], 2, x)
b

#     [,1] [,2] [,3] [,4] [,5]
#[1,]    1    5    4    7   10
#[2,]    2    6    5    8   11
#[3,]    3    7    6    9   12
#[4,]    4    8    7   10   13

……或甚至不进行子设置或重新分配:

sweep(b, 2, c(0,0,x))
 类似资料:
  • 问题内容: 所以我有一个 矩阵和一个 向量。我正在尝试编写代码以向量减去矩阵中的每一行。 我目前有一个 循环遍历该循环,并 通过向量减去矩阵中的-th行。 有没有一种方法可以通过向量简单地减去整个矩阵? 谢谢! 当前代码: 这是 矩阵的 第-行, 是向量。我可以这样做,这样就不需要 循环了吗? 问题答案: 在作品,但 只有当轴的联动轴具有相同的尺寸 。这是从矩阵成功减去向量的示例: 之所以可行,是

  • 我有一个有三个带的光栅和一个有三个列的矩阵。 我想找到y的每一行和r的每一个单元格之间的角度。 我可以通过以下方式将光栅转换为矩阵: 现在,每个has矩阵都具有相同的形状(每个has矩阵中有3列,每行作为一个像素或来自y的样本)。我已经研究过如何使用嵌套的apply()函数,但老实说,我不理解语法,因此无法使其正常工作。 我有40个非常大的超光谱光栅(425个波段)和一个50行矩阵,我需要使用它来

  • 我需要这个社区的R专家的帮助:set。种子(1234)x 我想得到这个输出: 谢谢你的帮助!

  • 问题内容: 我已经迷上了一些SQL,其中有几行数据,我想从上一行中减去一行,并使其一直向下重复。 所以这是表格: 我希望结果显示第三列,称为差异,即从下面的一列减去第一行,最后一行从零减去。 我已经尝试过自我连接,但是我不确定如何限制结果,而不是让结果不断循环。我不能确定id值对于给定的结果集是连续的,所以我不使用该值。我可以扩展架构以包括某种顺序值。 这是我尝试过的: 谢谢您的协助。 问题答案:

  • 问题内容: 我有一个像这样的numpy数组 我想创建一个看起来像这样的数组: 从而,每行对应于通过行索引+1移位的行。 一个简单的实现可能看起来像这样: 这给了我想要的输出。 我的问题是,是否有更聪明的方法可以避免循环。 问题答案: 这是一种方法,该方法主要使用剩余元素填充,然后帮助我们非常有效地创建转换后的版本- 样品运行- 运行时测试- 制作副本(如果您想进行更改,而不仅仅是用作只读数组),对

  • 我有一个数据框,行名称中有单元格ID,列x中有分类。 我还有一个矩阵,列中有细胞ID,行中有基因。 我想粘贴来自数据框的矩阵分类的名称,请参见下面的示例。

  • 问题内容: 我有两个arrayLists,我试图从另一个中“减去”一个arrayList。例如,如果我有一个arrayList [1,2,3],而我试图减去[0,2,4],则结果arrayList应该为[1,3]。 这是我的代码。 我的代码在某些情况下可以正常工作,例如if ,它将给我的结果。但是,如果我尝试像和 我得到这个异常: 这是我想出的代码。我已经通过它进行了测试,对我来说我认为它应该起作

  • 假设我们有两个矩阵,即和,分别为和。 我们如何才能找到哪些行与行相同(反之亦然)? 优选的输出是矩阵,其行数等于矩阵和之间的标识行,两列,即第一列包含矩阵的行数,第二列包含矩阵的行数。