【发布时间】:2016-10-18 14:51:09
【问题描述】:
我想要一个矩阵 d3 (m x n),它的每一行都是相同的,并且等于给定向量 (d0),维度为 n。
我的尝试如下: 让
m=1000
n=20000
d0=runif(n)
d1=diag(d0)
d2=array(1,dim=c(m,n)).
我想计算上述两个矩阵的乘积,d3,其中
d3=d2%*%d1.
这种直接的矩阵乘法方式非常慢。在上述特殊情况下如何使乘法更快?谢谢。
【问题讨论】:
-
在这种特殊情况下,你可以写
d3 <- d2 -
你能多说一些关于你的问题的实际限制吗?正如@HubertL 指出的那样,如果
d1是单位矩阵,那么你就完成了。d1实际上是一个对角线矩阵,其对角线上的条目不是 1 吗?在那种情况下,我认为sweep(d2,diag(d1),MARGIN=2,FUN="*")会起作用...... -
@BenBolker。我的问题的实际约束是一个对角矩阵,其条目不是 1。我在我的问题中更正了这一点。谢谢教授。
-
@HubertL。谢谢你的cmets。我更正了我的问题并发布了实际问题。
-
@BenBolker 您建议的代码比我的代码快 43 倍。这对我的问题非常有用。
标签: r