Suppose I have a matrix
A=
[1, 2, 3;
4, 5, 6;
7, 8, 9;
8, 7, 6];
我想要 A 的每一行和另一个矩阵 B 的叉积,其中
B=
[1, 0.5, 0.5;
0.5, 1, 0.5;
0.5, 0.5, 1];
for 循环可以写成,
for(i in 1:4)
{
t(A[i,])%*%B;
}
是否有更优化的方法来执行此操作而不使用 for 循环?
最佳答案
以下三个解决方案是等效的并提供相同的结果;但它们的性能有所不同。我确实在 10000
迭代的循环中运行它们来比较它们的平均性能,结果如下:
1-
for(i in 1:4)
{
t(A[i,])%*%B;
}
时间:0.46
2-
apply(A,1,crossprod,B)
时间:0.58
3-
t(A %*% B)
或
t(tcrossprod(A,B))
时间:0.08
关于r - R 中矩阵的每一行与另一个矩阵的叉积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15170969/