簡體   English   中英

MATLAB 中的任何內置 function 可以像 R 中的“ave”一樣工作?

[英]Any build-in function in MATLAB that can work like `ave` in R?

我正在尋找 MATLAB 中的MATLAB ,它可以與R中的ave以類似的方式工作。


這是R的示例:

set.seed(0)
x <- sample(c("A", "B"), 10, replace = TRUE)
xid <- ave(seq_along(x), x, FUN = seq_along)

這使

> x
 [1] "B" "A" "B" "A" "A" "B" "A" "A" "A" "B"
> xid
 [1] 1 1 2 2 3 3 4 5 6 4

換句話說,我不知道 MATLAB 中的MATLAB允許我按x分組並按組分配序列 ID,這樣我就可以獲得像xid這樣的數組。 我知道splitgroup可能接近目標,但它並沒有給我想要的 output 因為它會產生匯總結果。

該問題要求將x中的每個條目替換為到目前為止出現的次數。

我不知道有一個內置的 function 可以做到這一點。 這里有一些方法。

x = ['B' 'A' 'B' 'A' 'A' 'B' 'A' 'A' 'A' 'B']; % example data. Row vector
  • 短代碼,但內存效率低(計算中間N × N矩陣,其中Nx的長度):

     xid = sum(triu(x==x.'));
  • 更高效一點(計算一個中間U × N矩陣,其中Ux的唯一元素的數量):

     t = x==unique(x).'; xid = nonzeros(t.*cumsum(t,2)).';
  • 帶有循環的無聊高效代碼:

     xid = NaN(size(x)); % preallocate for u = unique(x) t = x==u; xid(t) = 1:sum(t); end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM