【问题标题】:Create array based on matrix and vector基于矩阵和向量创建数组
【发布时间】:2014-03-19 02:51:00
【问题描述】:

我有一个叫做 A 的矩阵:

A=matrix(c(1,2,3,4),nrow=2,ncol=2)

然后我想通过以下方式获得一个基于向量的数组,比如a=c(1,0.5,2)

1A=矩阵(c(1,2,3,4),nrow=2,ncol=2)

0.5A=矩阵(c(0.5,1,1.5,2),nrow=2,ncol=2)

2A=矩阵(c(2,4,6,8),nrow=2,ncol=2)

所以我想在数组的第一维中使用矩阵 1A,在数组的第二维中使用 0.5A,最后在数组的第三维中使用 2A。

谢谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    使用simplify = 'array'sapply

    sapply(c(1,0.5,2),'*',A,simplify='array')
    # , , 1
    # 
    #      [,1] [,2]
    # [1,]    1    3
    # [2,]    2    4
    # 
    # , , 2
    # 
    #      [,1] [,2]
    # [1,]  0.5  1.5
    # [2,]  1.0  2.0
    # 
    # , , 3
    # 
    #      [,1] [,2]
    # [1,]    2    6
    # [2,]    4    8
    

    或者kronecker得到两个数组的kronecker积

    kronecker(array(c(1,0.5,2),c(1,1,3)),A)
    # , , 1
    # 
    #      [,1] [,2]
    # [1,]    1    3
    # [2,]    2    4
    # 
    # , , 2
    # 
    #      [,1] [,2]
    # [1,]  0.5  1.5
    # [2,]  1.0  2.0
    # 
    # , , 3
    # 
    #      [,1] [,2]
    # [1,]    2    6
    # [2,]    4    8
    

    【讨论】:

    • @Ku-trala kronecker 是一个 s4 方法,因此方法分派和任何复制都可能需要时间。 sapply 调用 simplify2array 以“慢”而臭名昭著。方法调度和 simple2array 速度之间的权衡将取决于输入和结果的大小。
    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 2015-04-16
    • 1970-01-01
    • 2010-11-03
    • 2022-12-03
    • 2021-10-13
    • 2012-09-04
    • 2020-10-06
    相关资源
    最近更新 更多