[英]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
矩陣,其中N
是x
的長度):
xid = sum(triu(x==x.'));
更高效一點(計算一個中間U
× N
矩陣,其中U
是x
的唯一元素的數量):
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.