我正在使用bigmemory包。我想计算w。我的v长度是478000,k长度是240500。两个矩阵相乘w非常大。
我通过循环运行代码,但它仍在运行并且尚未完成,我不知道是否会给我结果。
我尝试在没有 for 循环的情况下计算它,但我得到了错误。请帮助纠正我的代码以使其更快。
v <-read.big.matrix('v.dat',type='double')
k <-read.big.matrix('k.dat',type='double')
m=length(v);
n=length(k);
for(i in 1:m)
{
for(j in 1:n)
{
w[i,j] = 2 * cos(dt * v[i] * k[j]) - 2
}
}
我如何在循环之前定义 w,因为 w 的大小非常大,我不能像 w <- matrix(nr,ncol)
那样做.
最佳答案
预分配矩阵可以这样完成:
m = matrix(rep(0, number_or_rows*number_of_columns),
number_of_rows, number_of_columns))
这将创建一个矩阵,其中的行数和列数在变量 number_of_rows
和 number_of_columns
中定义,最初全部填充为 0。
可能出现的问题是,由于 w
的大小与 v
和 k
相同,因此您很可能会运行填充w
时出现内存问题。您还可以通过使用 w
的 bigmemory
矩阵或分块运行分析来解决此问题。
关于r - 分配一个大矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14400340/