3 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以通過(guò)首先定義一個(gè)函數(shù),如下所示,在R中重現(xiàn)rep函數(shù)的語(yǔ)法:
function [result]=rep(array, count)matrix = repmat(array, count,1);result = matrix(:);
然后,您可以通過(guò)使用行或列向量調(diào)用來(lái)重現(xiàn)所需的行為:
>> rep([1 2 3],3)ans = 1 1 1 2 2 2 3 3 3>> rep([1 2 3]',3) ans = 1 2 3 1 2 3 1 2 3
注意我在第二次調(diào)用中使用了transpose(')運(yùn)算符將輸入數(shù)組作為列向量(3x1矩陣)傳遞。
我在筆記本電腦上對(duì)此進(jìn)行了基準(zhǔn)測(cè)試,并且對(duì)于重復(fù)100次的100,000個(gè)元素的基本陣列,它比使用上面的ceil選項(xiàng)快2到8倍,具體取決于您是否需要第一個(gè)或第二個(gè)排列。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
好問(wèn)題+1。完成此任務(wù)的簡(jiǎn)潔單線方法是通過(guò)Kronecker張量積,例如:
A = [1 2 3];N = 3;B = kron(A, ones(1, N));
然后:
B = 1 1 1 2 2 2 3 3 3
更新: @Dan提供了一個(gè)非常簡(jiǎn)潔的解決方案,看起來(lái)比我的kron
方法更有效,所以在離開(kāi)頁(yè)面前檢查答案:-)
更新: @bcumming還提供了一個(gè)很好的解決方案,當(dāng)輸入向量很大時(shí),它應(yīng)該非常好地?cái)U(kuò)展。

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
如果像我一樣你不知道Kronecker張量產(chǎn)品是什么,你可能會(huì)對(duì)這個(gè)更直觀(實(shí)際上我認(rèn)為更快)的解決方案感興趣:
c(ceil((1:length(c)*n)/n));
所以我在這里用矢量索引來(lái)復(fù)制矩陣。例如,使用上面的兩個(gè)案例,我們可以做到:
c = 1:3;c([1 1 1 2 2 2 3 3 3]) %for each c([1 2 3 1 2 3 1 2 3]) %for times
所以問(wèn)題是如何在沒(méi)有你要求的功能的情況下制作矢量[1 2 3 1 2 3 1 2 3]。所以我用我們需要的元素?cái)?shù)量(即1:9)然后除以3并向上舍入(即ceil((1:9)/3)
在命令行中嘗試)。
一些基準(zhǔn)測(cè)試(我知道這些東西應(yīng)該在循環(huán)中,所以這可能不是那么準(zhǔn)確):
c = 1:3; n = 3;tic; k = kron(c, ones(1, n)); toc; % 0.000208 seconds.tic; a = c(ceil((1:length(c)*n)/n)); toc; % 0.000025 seconds.clear;c = 1:1000000; n = 3;tic; k = kron(c, ones(1, n)); toc; % 0.143747 seconds.tic; a = c(ceil((1:length(c)*n)/n)); toc; % 0.090956 seconds.clear;c = 1:10000; n = 1000;tic; k = kron(c, ones(1, n)); toc; % 0.583336 seconds.tic; a = c(ceil((1:length(c)*n)/n)); toc; % 0.237878 seconds.
- 3 回答
- 0 關(guān)注
- 658 瀏覽
添加回答
舉報(bào)