两组之间均匀间隔的数字(向量化 LINSPACE)- MATLAB
Evenly spaced numbers between two sets (Vectorize LINSPACE) - MATLAB
当a
和b
是向量或集合;更具体地说,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
当a
和b
是向量或集合;更具体地说,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