将向量添加到矩阵的所有行

时间:2016-09-12 03:42:19

标签: r matrix vectorization

我正在最大化似然函数并尝试减少循环。 我想将向量(要估计的参数)添加到矩阵(数据)的所有行。向量的长度等于矩阵的列。 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

2 个答案:

答案 0 :(得分:8)

我们可以使用09-11 23:46:35.346 32708-32708/com.xxxxxxx.xxxxxxxx A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x28 in tid 32708 (jumblednameofapplicationclass) 来复制'a'元素

col

或者更快的选择是使用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, "+")

答案 1 :(得分:0)

使用outer()collapse::TRA()的{​​{3}}解决方案比使用repsweep的解决方案快得多。