我有两个矩阵,其中一个(让我们说矩阵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矩阵的所有对之间。
我希望我足够清楚。
答案 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