【问题标题】:Combination of Matrices矩阵组合
【发布时间】:2016-05-07 16:01:48
【问题描述】:

我有两个矩阵,其中一个(假设矩阵 H)是 4x2,另一个(矩阵 N)是 100x2。 我想为每一对 N 做一个组合,包含每一对 H。

基本上,如果我的

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

我想要一个最终的矩阵

M = [1 2 2 1; 1 2 4 1; 1 4 2 1; 1 4 4 1; 1 2 2 2; 1 2 4 2; ...; 10 4 4 10] 

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

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

我希望我已经足够清楚了。

【问题讨论】:

  • H 是 4x2 矩阵,N 是 10x2 矩阵,你的最终矩阵不应该是 40x4 而不是 100x4?

标签: matlab matrix combinations


【解决方案1】:

使用以下语法:

%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。

【讨论】:

  • 谢谢。它有效,我的意思是 |N| 为 100x2,对此感到抱歉。
  • 我很高兴它有帮助:)
【解决方案2】:

试试这个:

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

【讨论】:

  • 谢谢,我一直在寻找没有 for 循环的解决方案,但这似乎也有效。
猜你喜欢
  • 1970-01-01
  • 2016-02-02
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多