【发布时间】:2011-01-23 20:23:55
【问题描述】:
我的问题与one 类似,但我想根据第二个相同大小的数组中指定的计数复制每个元素。
举个例子,假设我有一个数组v = [3 1 9 4],我想用rep = [2 3 1 5]复制第一个元素2次,第二个3次,以此类推得到[3 3 1 1 1 9 4 4 4 4 4]。
到目前为止,我正在使用一个简单的循环来完成工作。这是我开始的:
vv = [];
for i=1:numel(v)
vv = [vv repmat(v(i),1,rep(i))];
end
我设法通过预先分配空间来改进:
vv = zeros(1,sum(rep));
c = cumsum([1 rep]);
for i=1:numel(v)
vv(c(i):c(i)+rep(i)-1) = repmat(v(i),1,rep(i));
end
但是我仍然觉得必须有一个更聪明的方法来做到这一点......谢谢
【问题讨论】:
-
@Doresoom:我以为我以前回答过这样的问题,但找不到。我终于和你同时追捕了它。标题和标签完全不同,这使得它有点难以找到。
-
如果有人来这里寻找 numpy 解决方案,请查看docs.scipy.org/doc/numpy/reference/generated/numpy.repeat.html
标签: arrays matlab repeat run-length-encoding elementwise-operations