矩阵的组合

时间:2016-05-07 16:01:48

标签: matlab matrix combinations

我有两个矩阵,其中一个(让我们说矩阵H)是4x2而另一个(矩阵N)是100x2。 我想为每一对N组合,包含每一对H.

基本上,如果我的

@items=Item.where(:category_id => @active_category_id)
.where.not(:detail=> 1).order(:price)

我想有一个最终矩阵

H = [2 2; 2 4; 4 2; 4 4]
N = [1 1; 1 2; 1 3; ...; 
    10 8; 10 9; 10 10]

大小为100x4(因为每对N将乘以| H | = 4倍。)

所以所有H矩阵对都在我的N矩阵的所有对之间。

我希望我足够清楚。

2 个答案:

答案 0 :(得分:2)

使用以下语法:

%calculates the Cartesian multipication of 1:size(h,1) and 1:size(N,1) 
sets = {1:size(H,1), 1:size(N,1)};
[hInds, nInds] = ndgrid(sets{:});

%generates the output matrix
outRes = [N( nInds(:),1),H( hInds(:),1),H( hInds(:),2),N( nInds(:),2)];

部分结果(仅显示输出的第一行):

 outRes = 
 1     2     2     1
 1     2     4     1
 1     4     2     1
 1     4     4     1
 1     2     2     2
 1     2     4     2
 1     4     2     2
 1     4     4     2
 1     2     2     3
 1     2     4     3
 1     4     2     3
 1     4     4     3
 ...

请注意,如果N为4x2且N为10x2,则最终矩阵大小为40x4而不是100x4,如您所述。

答案 1 :(得分:1)

试试这个:

H= [2 2; 2 4; 4 2; 4 4];
N= fix(100*(rand(10,2))) % Replace this with your N matrix

iter=0;
for i=1:10
for j=1:4
    iter=iter+1;
A(iter,:)=[N(i,1), H(j,1:2), N(i,2)];
end
end

A