假设我们有两个向量:
A =(a 1,a 2,...,aₘ)和B =(b 1,b 2,...,bₘ)
我们需要为这两者之间的所有向量做一些事情。
例如,对于A =(1,1,0)和B =(1,2,2),A和B之间的所有向量都是:{(1,1,1),(1,1, 2),(1,2,0),(1,2,1)}。
生成此类向量的一种显而易见的方法是使用m循环(for
循环),但可能它不是最好的。我想知道是否有人有更好的想法。
答案 0 :(得分:2)
这是一种固定的方法。返回一个矩阵,其中每一行都是结果的向量之一。
% Data
A = [0, 0, 1, 3, 5, 2]
B = [4, 8, 5, 7, 9, 6]
% Preallocate
b = cell(1,numel(A));
vec = cell(1,numel(A));
% Make a vector of values of each element of the result
for i = 1:numel(A)
vec{i} = A(i):B(i);
end
% Get all combinations using ndgrid
[b{:}] = ndgrid(vec{:});
b=cat(ndims(b{1})+1,b{:});
% Reshape the numel(A)+1 dimensional array into a 2D array
res = reshape(b,numel(b)/length(A),length(A));