两组之间均匀间隔的数字(向量化 LINSPACE)- MATLAB

Evenly spaced numbers between two sets (Vectorize LINSPACE) - MATLAB

ab 是向量或集合;更具体地说,M 中的每一行 i 应该有一个等于 a(i) 的第一个值和一个等于 b(i) 的最后一个值,并且在它们之间有 5 个相等的步骤。

例如,如果我有

a = [0;     b = [10;
     0];         20]; 

我想生成一个 M 形式的矩阵

[0 2 4  6  8 10;...
 0 4 8 12 16 20]

我知道如何使用循环来做到这一点,但我正在寻找没有循环的解决方案。我该怎么做?

一个vectorized approach with bsxfun-

steps = 5                               %// number of steps
M = bsxfun(@plus,((b(:)-a(:))./(steps-1))*[0:steps-1],a(:))

样本运行-

a =
     2
     3
b =
    18
    23
M =
     2     6    10    14    18
     3     8    13    18    23

这是一种使用 arrayfun 的方法(比@Divakar 的 bsxfun 解决方案慢)但只是为了它:

clear
clc

a=[0;0];
b=[10;20];

%// Customize the stepsize
Step = 5;

M = cell2mat(arrayfun(@(a,b) (a:(b-a)/Step:b), a,b,'uni',false))

M =

     0     2     4     6     8    10
     0     4     8    12    16    20