亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

與Mat的R代表類似的函數

與Mat的R代表類似的函數

呼啦一陣風 2019-08-28 14:18:16
與Mat的R代表類似的函數我正在尋找一個rep與Matlab中R函數類似的函數。例如,rep我可以執行以下操作:> rep(c(1,2,3),times=3)[1] 1 2 3 1 2 3 1 2 3> rep(c(1,2,3),each=3)[1] 1 1 1 2 2 2 3 3 3>在matlab中有repmat函數,它完成了第一部分>> repmat([1,2,3],1,3)ans =      1     2     3     1     2     3     1     2     3但不是第二部分(或者至少我不明白該怎么做)。有什么建議?
查看完整描述

3 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

您可以通過首先定義一個函數,如下所示,在R中重現rep函數的語法:

function [result]=rep(array, count)matrix = repmat(array, count,1);result = matrix(:);

然后,您可以通過使用行或列向量調用來重現所需的行為:

>> 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

注意我在第二次調用中使用了transpose(')運算符將輸入數組作為列向量(3x1矩陣)傳遞。

我在筆記本電腦上對此進行了基準測試,并且對于重復100次的100,000個元素的基本陣列,它比使用上面的ceil選項快2到8倍,具體取決于您是否需要第一個或第二個排列。


查看完整回答
反對 回復 2019-08-28
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

好問題+1。完成此任務的簡潔單線方法是通過Kronecker張量積,例如:

A = [1 2 3];N = 3;B = kron(A, ones(1, N));

然后:

B =

     1     1     1     2     2     2     3     3     3

更新: @Dan提供了一個非常簡潔的解決方案,看起來比我的kron方法更有效,所以在離開頁面前檢查答案:-)

更新: @bcumming還提供了一個很好的解決方案,當輸入向量很大時,它應該非常好地擴展。


查看完整回答
反對 回復 2019-08-28
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

如果像我一樣你不知道Kronecker張量產品是什么,你可能會對這個更直觀(實際上我認為更快)的解決方案感興趣:

c(ceil((1:length(c)*n)/n));

所以我在這里用矢量索引來復制矩陣。例如,使用上面的兩個案例,我們可以做到:

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

所以問題是如何在沒有你要求的功能的情況下制作矢量[1 2 3 1 2 3 1 2 3]。所以我用我們需要的元素數量(即1:9)然后除以3并向上舍入(即ceil((1:9)/3)在命令行中嘗試)。

一些基準測試(我知道這些東西應該在循環中,所以這可能不是那么準確):

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.


查看完整回答
反對 回復 2019-08-28
  • 3 回答
  • 0 關注
  • 670 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號