matlab - 从开始/结束索引列表创建矢量化数组

标签 matlab vectorization

我有一个两列矩阵 M,其中包含一组间隔的开始/结束索引:

startInd   EndInd
1          3
6          10
12         12
15         16

如何生成所有区间索引的向量:

v = [1 2 3 6 7 8 9 10 12 15 16];

我正在使用循环执行上述操作,但我想知道是否有更优雅的矢量化解决方案?

v = [];
for i=1:size(M,1)
    v = [v M(i,1):M(i,2)];
end

最佳答案

这是我喜欢使用函数 cumsum 来解决这个特定问题的矢量化解决方案:

v = zeros(1, max(endInd)+1);  % An array of zeroes
v(startInd) = 1;              % Place 1 at the starts of the intervals
v(endInd+1) = v(endInd+1)-1;  % Add -1 one index after the ends of the intervals
v = find(cumsum(v));          % Perform a cumulative sum and find the nonzero entries

关于matlab - 从开始/结束索引列表创建矢量化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2807270/

相关文章:

java - 从 Matlab 中以隐藏、最小化、最大化等状态打开第三方应用程序

matlab - 在 MATLAB 中实现和绘制感知器

python - 在多维空间中将多个子矩阵 reshape /组合为一个矩阵

python - 加速 numpy 中的 for 循环

c++ - 将 Matlab 的 bsxfun 转换为 Eigen

matlab - 补丁透明度问题 (FaceAlpha)

matlab - 在不提取Matlab中的内容的情况下读取Zip文件中的CSV文件的数据

python - 根据先前的值对带有操作的 numpy 代码进行矢量化

c++11 - 使用 unique_ptr 是否意味着我不必使用 restrict 关键字?

向量化双求和的 Pythonic 方法