在Haskell,如果我想获得该只包含5号10元素的列表,我可以做这样的事情:填充MATLAB阵列相同的价值观
take 10 $ repeat 5
输出:
[5,5,5,5,5,5,5,5,5,5]
在MATLAB中有这样的东西吗?
在Haskell,如果我想获得该只包含5号10元素的列表,我可以做这样的事情:填充MATLAB阵列相同的价值观
take 10 $ repeat 5
输出:
[5,5,5,5,5,5,5,5,5,5]
在MATLAB中有这样的东西吗?
这是很容易重复的值分配给数组:
x(1:10) = 5;
如果你想生成元素的数组内联在声明中尝试这样:
ones(1,10) * 5
或
repmat(5, 1, 10)
请参阅repmat的文档。
B = repmat(5,1,10)
的那些方法比使用repmat快得多:
>> tic; for i = 1:1e6, x=5*ones(10,1); end; toc
Elapsed time is 3.426347 seconds.
>> tic; for i = 1:1e6, y=repmat(5,10,1); end; toc
Elapsed time is 20.603680 seconds.
而且,在我看来,为使更可读的代码。
正如在其他的答案中提到,您可以使用:
>> tic; x=5*ones(10,1); toc
Elapsed time is 0.000415 seconds.
更快的方法是:
>> tic; x=5; x=x(ones(10,1)); toc
Elapsed time is 0.000257 seconds.
鉴于预定m-by-n
矩阵大小和目标值val
,在你的榜样:
m = 1;
n = 10;
val = 5;
目前有7
不同ap浮现在我的脑海proaches:
1)使用repmat功能(0.094066秒)
A = repmat(val,m,n)
2)与分配未定义的矩阵索引(0.091561秒)
A(1:m,1:n) = val
3)关于使用ones函数(0.151357秒目标值索引)
A = val(ones(m,n))
4)默认值初始化全分配(0。104292秒)
A = zeros(m,n);
A(:) = val
5)使用ones函数乘法(0.069601秒)
A = ones(m,n) * val
6)使用zeros函数并加入(0.057883秒)
A = zeros(m,n) + val
7)使用repelem功能(0.168396秒)
A = repelem(val,m,n)
每一种方法的描述之后,在括号之间的时,其相应的基准下Matlab 2017a
并用100000
迭代进行。获胜者是6th
的方法,这并不令我感到惊讶。
解释很简单:分配通常会产生零填充的内存槽......因此除了向矩阵的每个成员添加val
之外,不会执行其他操作,并且最重要的是,输入参数清理很短。
同样不能说是为5th
方法,这是第二个最快的一个,因为尽管输入参数消毒过程是基本相同,对记忆侧正在执行,而不是两个三个操作:
1
val
http://www.mathworks.com/help/techdoc/ref/repmat.html – zellus 2011-02-07 06:59:23
非常感谢。如果您将此作为答案提交,我会将其标记为正确。 – Tyler 2011-02-07 07:01:28
可能相关的问题:http://stackoverflow.com/questions/1947889/element-wise-array-replication-in-matlab,http://stackoverflow.com/questions/1975772/matlab-array-manipulation,http:/ /stackoverflow.com/questions/2382319/matlab-element-wise-array-replication-according-to-a-count – Amro 2011-02-08 01:34:29