假设我有一维数组:
并复制数组的每个元素n次?
a = [1, 2, 3];
例如,n应该返回replicate(a, 3).
请注意,这与...完全不同[1,1,1,2,2,2,3,3,3].我当然可以repmat通过replicate对每个元素进行实现并连接结果来实现,但我想知道是否有更高效的内置函数.
arrays matlab repeat run-length-encoding elementwise-operations
如何从向量中随机选取N个数字,a并为每个数字分配权重?
让我们说:
a = 1:3; % possible numbers
weight = [0.3 0.1 0.2]; % corresponding weights
Run Code Online (Sandbox Code Playgroud)
在这种情况下,拾取1的概率应该比拾取2的概率高3倍.
所有权重的总和可以是任何东西.
为了巧妙地使用线性索引accumarray,我有时觉得需要根据游程编码生成序列.由于没有内置函数,我要求最有效的方法来解码在RLE中编码的序列.
为了使这个公平比较,我想为该功能设置一些规范:
values指定了相同长度的可选第二个参数,则输出应该根据这些值,否则只是值1:length(runLengths).runLengthsvalues 是一个单元阵列.runLengths 简而言之:该函数应该等效于以下代码:
function V = runLengthDecode(runLengths, values)
[~,V] = histc(1:sum(runLengths), cumsum([1,runLengths(:).']));
if nargin>1
V = reshape(values(V), 1, []);
end
V = shiftdim(V, ~isrow(runLengths));
end
Run Code Online (Sandbox Code Playgroud)
以下是一些测试用例
runLengthDecode([0,1,0,2])
runLengthDecode([0,1,0,4], [1,2,4,5].')
runLengthDecode([0,1,0,2].', [10,20,30,40])
runLengthDecode([0,3,1,0], {'a','b',1,2})
Run Code Online (Sandbox Code Playgroud)
和他们的输出:
>> runLengthDecode([0,1,0,2])
ans =
2 4 4
>> runLengthDecode([0,1,0,4], [1,2,4,5].')
ans =
2 5 5 5 5
>> runLengthDecode([0,1,0,2].', [10,20,30,40])
ans =
20
40
40
>> runLengthDecode([0,3,1,0],{'a','b',1,2})
ans …Run Code Online (Sandbox Code Playgroud) 我的问题是与此类似一个,但我想根据在相同尺寸的第二阵列指定的计数复制每个元素.
这方面的一个例子,比如我有一个数组v = [3 1 9 4],我想用它rep = [2 3 1 5]来复制第一个元素2次,第二次复制,依此类推[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
Run Code Online (Sandbox Code Playgroud)
我设法通过预先分配空间来改进:
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
Run Code Online (Sandbox Code Playgroud)
但是我仍然觉得必须有一个更聪明的方法来做到这一点......谢谢
arrays matlab repeat run-length-encoding elementwise-operations
我有一个3维矩阵.我想将大小为8x2x9的矩阵复制到由向量给出的第三维中指定的次数,[3, 2, 1, 1, 5, 4, 2, 2, 1]这样得到的矩阵大小为8x2x21.repelem对于矩阵,是否有任何内置MATLAB函数(我正在运行版本2014a)来执行类似于较新函数的操作?
我需要的一个简单例子:
% Input:
A(:,:,1) = [1 2; 1 2];
A(:,:,2) = [2 3; 2 3];
% Function call:
A = callingfunction(A, 1, 1, [1 2]);
% Output:
A(:,:,1) = [1 2; 1 2];
A(:,:,2) = [2 3; 2 3];
A(:,:,3) = [2 3; 2 3];
Run Code Online (Sandbox Code Playgroud) 我在Matlab向量B维nx1包含整数从1到n按照一定的顺序,例如n=6 B=(2;4;5;1;6;3).
我有一个矢量A维数mx1与m>1包含在升序每一个重复任意次数,例如,相同的整数m=13 A=(1;1;1;2;3;3;3;4;5;5;5;5;6).
我想获得C维度mx1,其中整数in A按顺序重新排序B.在这个例子中,C=(2;4;5;5;5;5;1;1;1;6;3;3;3)
给定一个数组'数组'和一组索引'索引',如何找到通过以矢量化方式沿着这些索引分割数组形成的子数组的累积和?澄清一下,假设我有:
>>> array = np.arange(20)
>>> array
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
indices = np.arrray([3, 8, 14])
Run Code Online (Sandbox Code Playgroud)
操作应该输出:
array([0, 1, 3, 3, 7, 12, 18, 25, 8, 17, 27, 38, 50, 63, 14, 29, 45, 62, 80, 99])
Run Code Online (Sandbox Code Playgroud)
请注意,阵列非常大(100000个元素),因此,我需要一个矢量化答案.使用任何循环会大大减慢它.另外,如果我有同样的问题,但是2D数组和相应的索引,我需要为数组中的每一行做同样的事情,我该怎么办呢?
对于2D版本:
>>>array = np.arange(12).reshape((3,4))
>>>array
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> indices = np.array([[2], [1, …Run Code Online (Sandbox Code Playgroud) 怎么重复
A = [ 1 2 ;
3 4 ]
Run Code Online (Sandbox Code Playgroud)
重复
B = [ 1 2 ;
2 1 ]
Run Code Online (Sandbox Code Playgroud)
所以我希望我的答案像矩阵C:
C = [ 1 2 2;
3 3 4 ]
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
matlab ×7
arrays ×4
repeat ×3
matrix ×2
performance ×2
elements ×1
numpy ×1
python ×1
random ×1
replication ×1