相关疑难解决方法(0)

重复数组元素的副本:在MATLAB中运行长度解码

我正在尝试使用'values'数组和'counter'数组将多个值插入到数组中.例如,如果:

a=[1,3,2,5]
b=[2,2,1,3]
Run Code Online (Sandbox Code Playgroud)

我想要一些功能的输出

c=somefunction(a,b)
Run Code Online (Sandbox Code Playgroud)

成为

c=[1,1,3,3,2,5,5,5]
Run Code Online (Sandbox Code Playgroud)

其中a(1)重复b(1)次,a(2)重复b(2)次等等...

MATLAB中是否有内置函数来执行此操作?如果可能的话,我想避免使用for循环.我尝试过'repmat()'和'kron()'的变体无济于事.

这基本上是Run-length encoding.

arrays matlab vectorization repeat run-length-encoding

16
推荐指数
4
解决办法
4099
查看次数

计算意味着MATLAB中给定持续时间值的时间步长

例如,我有5个时间步和一个持续时间值:

TimeSteps = [4, 5, 6, 7, 8, 10, 11, 12, 14, 15, 16];
Duration = [5, 3, 3];
Run Code Online (Sandbox Code Playgroud)

我想自动生成每个持续时间的时间步长之间的平均值.在这种情况下,结果将如下所示:

Result = [mean([4, 5, 6, 7, 8]), mean([10, 11, 12]), mean([14, 15, 16])]; 
Run Code Online (Sandbox Code Playgroud)

这将导致:

Result = [6, 11, 15]; 
Run Code Online (Sandbox Code Playgroud)

我有一个474x1的持续时间向量,所以我需要自动化这个.如果有人可以提供帮助,那就太好了.谢谢.

arrays matlab

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

MATLAB矢量化:计算邻域矩阵

给定两个向量XY长度n,表示平面上的点和邻域半径rad,是否有一种矢量化方法来计算点的邻域矩阵?

换句话说,可以对以下(对于大的痛苦缓慢n)循环进行矢量化:

neighborhood_mat = zeros(n, n);
for i = 1 : n
    for j = 1 : i - 1
        dist = norm([X(j) - X(i), Y(j) - Y(i)]);
        if (dist < radius)
            neighborhood_mat(i, j) = 1;
            neighborhood_mat(j, i) = 1;
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

performance matlab vector matrix vectorization

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

在MATLAB中反表制函数

我有一个freq频率数组和另一个val有值的数组.

val =[1 3 5 7];    
freq=[2 3 3 2];
Run Code Online (Sandbox Code Playgroud)

我想得到阵列result.

result=[1 1 3 3 3 5 5 5 7 7];
Run Code Online (Sandbox Code Playgroud)

我试图获得的方法之一result是:

freq=[2 3 3 2];
val=[1 3 5 7];
result=[];
for i=1:length(val);
    result=[result repmat(val(i),1,freq(i))];
end
Run Code Online (Sandbox Code Playgroud)

它可以工作,但是对于大型阵列,如果我摆脱for-loop,我希望获得一些性能提升.这有什么内置功能吗?你会如何计算result大型阵列?

performance matlab

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