gpt4 book ai didi

r - 向矩阵的所有行添加一个向量

转载 作者:行者123 更新时间:2023-12-04 10:35:24 28 4
gpt4 key购买 nike

我正在最大化似然函数并试图减少循环。
我想将向量(要估计的参数)添加到矩阵(数据)的所有行。向量的长度等于矩阵的列。a+b会给出错误的结果,因为 R 的回收规则是按列而不是行。

a<-c(1,2,0,0,0)  # parameters to be optimized
b<-matrix(1,ncol=5,nrow=6) # data
t(a+t(b)) # my code would work, anything more intuitive?

欲购 输出
        [,1] [,2] [,3] [,4] [,5]
[1,] 2 3 1 1 1
[2,] 2 3 1 1 1
[3,] 2 3 1 1 1
[4,] 2 3 1 1 1
[5,] 2 3 1 1 1
[6,] 2 3 1 1 1

输出
a+b
[,1] [,2] [,3] [,4] [,5]
[1,] 2 3 1 1 1
[2,] 3 1 1 1 2
[3,] 1 1 1 2 3
[4,] 1 1 2 3 1
[5,] 1 2 3 1 1
[6,] 2 3 1 1 1

最佳答案

我们可以使用 col复制“a”元素

b + a[col(b)]
# [,1] [,2] [,3] [,4] [,5]
#[1,] 2 3 1 1 1
#[2,] 2 3 1 1 1
#[3,] 2 3 1 1 1
#[4,] 2 3 1 1 1
#[5,] 2 3 1 1 1
#[6,] 2 3 1 1 1

或者更快的选择是使用 rep
b + rep(a, each = nrow(b))

或使用 sweep
sweep(b, 2, a, "+")

基准
set.seed(24)
b <- matrix(sample(0:9, 8000*5000, replace=TRUE), ncol=5000)
a <- sample(0:3, 5000, replace=TRUE)
system.time(b + a[col(b)])
# user system elapsed
# 1.08 0.06 1.14
system.time(b + rep(a, each = nrow(b)))
# user system elapsed
# 0.83 0.03 0.86

system.time(t(a+t(b)))
# user system elapsed
# 1.14 0.03 1.17

system.time(sweep(b, 2, a, "+"))
# user system elapsed
# 0.62 0.06 0.69

关于r - 向矩阵的所有行添加一个向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39443055/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com