在MATLAB中的repmat与简单矩阵乘法

时间:2017-03-30 12:01:12

标签: matlab matrix

v为长度为n的行向量。目标是创建一个矩阵A,其中m行等于v。

MATLAB有一个名为repmat的函数。可能的代码是

A = repmat(v,[m 1])

使用简单的矩阵运算有另一种同样简洁的方法

A = ones(m,1)*v

这两种方法中的任何一种都适用于大m和n?

2 个答案:

答案 0 :(得分:2)

您应该使用repmat()

矩阵乘法是O(n ^ 3)运算,它比在内存中复制数据要慢得多 最重要的是,第二个选项在内存中分配更多数据输出的大小。

在上面的例子中,你创建一个向量,外部乘法更快但仍然不作为内存操作。

MATLAB不使用所有向量元素为1的知识,因此将x的每个元素乘以1 m次。

这两个操作都将主要受内存限制,但更高效,快速和直接的方法将与repmat()一起使用。

问题是,你之后做了什么? 因为您可能不需要repmat()

答案 1 :(得分:2)

让我们比较一下!

测试算法时,2个指标很重要:时间和内存。

让我们从时间开始:

enter image description here

显然,repmat赢了!

内存:

profile -memory on
for m=1000:1000:50000
f1=@()(repmat(v,[m 1]));
f2=@()(ones(m,1)*v);
ii=ii+1;
t1(ii)=timeit(f1);
t2(ii)=timeit(f2);
end
profreport

enter image description here

似乎两者都占用相同数量的内存。但是,分析器以not showing all the memory而闻名,因此我们无法完全信任它。

但很明显, repmat更好