如何生成两个给定的m元组向量之间的所有向量?

时间:2017-06-12 14:09:27

标签: arrays matlab vector

假设我们有两个向量:
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循环),但可能它不是最好的。我想知道是否有人有更好的想法。

1 个答案:

答案 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));
相关问题