相关疑难解决方法(0)

Matlab中的元素阵列复制

假设我有一维数组:

a = [1, 2, 3];
并复制数组的每个元素n次?

例如,n应该返回replicate(a, 3).

请注意,这与...完全不同[1,1,1,2,2,2,3,3,3].我当然可以repmat通过replicate对每个元素进行实现并连接结果来实现,但我想知道是否有更高效的内置函数.

arrays matlab repeat run-length-encoding elementwise-operations

18
推荐指数
3
解决办法
1万
查看次数

MATLAB中的加权随机数

如何从向量中随机选取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倍.

所有权重的总和可以是任何东西.

random matlab

17
推荐指数
2
解决办法
2万
查看次数

MATLAB中的行程解码

为了巧妙地使用线性索引accumarray,我有时觉得需要根据游程编码生成序列.由于没有内置函数,我要求最有效的方法来解码在RLE中编码的序列.

规格:

为了使这个公平比较,我想为该功能设置一些规范:

  • 如果values指定了相同长度的可选第二个参数,则输出应该根据这些值,否则只是值1:length(runLengths).
  • 优雅处理:
    • runLengths
    • values 是一个单元阵列.
  • 输出向量应具有相同的列/行格式 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)

performance matlab run-length-encoding

13
推荐指数
3
解决办法
1473
查看次数

根据计数的元素数组复制

我的问题是与此类似一个,但我想根据在相同尺寸的第二阵列指定的计数复制每个元素.

这方面的一个例子,比如我有一个数组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

8
推荐指数
1
解决办法
2926
查看次数

MATLAB中的元素矩阵复制

我有一个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)

replication matlab matrix elements

7
推荐指数
1
解决办法
1751
查看次数

在Matlab中重新排序向量?

我在Matlab向量Bnx1包含整数从1n按照一定的顺序,例如n=6 B=(2;4;5;1;6;3).

我有一个矢量A维数mx1m>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)

arrays matlab

4
推荐指数
1
解决办法
158
查看次数

查找由numpy数组的索引分割的子数组的子集

给定一个数组'数组'和一组索引'索引',如何找到通过以矢量化方式沿着这些索引分割数组形成的子数组的累积和?澄清一下,假设我有:

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

python arrays performance numpy vectorization

3
推荐指数
1
解决办法
829
查看次数

如何在matlab中重复元素矩阵

怎么重复

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

2
推荐指数
2
解决办法
1624
查看次数