Matlab 连接矩阵行的所有组合

Matlab 连接矩阵行的所有组合,matlab,matrix,combinations,Matlab,Matrix,Combinations,我使用matlab,需要组合两个二维矩阵,因此生成的行是来自连接在一起的输入矩阵的行的组合 我尝试了ndgrid,但这会创建所有可能的组合。我需要输入行保持在一起以创建输出 以下是一个例子: 我得到: a= [1 2 3 4 5 6]; b= [7 8 9 10]; 我需要: needed = [1 2 3 7 8 1 2 3 9 10 4 5 6 7 8 4 5 6 9 10]; 如果可能的话,我

我使用matlab,需要组合两个二维矩阵,因此生成的行是来自连接在一起的输入矩阵的行的组合

我尝试了ndgrid,但这会创建所有可能的组合。我需要输入行保持在一起以创建输出

以下是一个例子:

我得到:

  a= [1 2 3
      4 5 6];

  b= [7 8
      9 10];
我需要:

needed = [1 2 3 7 8
          1 2 3 9 10
          4 5 6 7 8
          4 5 6 9 10];

如果可能的话,我更愿意不使用循环来执行此操作

它会给出所需的结果,但是如果您有重复的项目,您可能需要其他东西,然后进行数组合并

$a = array(array(1, 2, 3), array(4, 5, 6));
$b = array(array(7, 8), array(9, 10));

$acc = array_reduce($a, function ($acc, $r) use ($b) {
  foreach ($b as $br) {
    $acc []= array_merge($r, $br);
  }

  return $acc;
}, array());

var_dump($acc);

编辑:对不起,我刚刚注意到“无循环”部分。您可以将foreach更改为array_reduce至。

对于
a
使用Kronecker产品,对于
b
使用
repmat

[kron(a, ones(size(b,1),1)), repmat(b, [size(a, 1), 1])]

ans =

     1     2     3     7     8
     1     2     3     9    10
     4     5     6     7     8
     4     5     6     9    10
下面是对使用
find
的一个改编:

[ib, ia] = find(true(size(b, 1), size(a, 1)));
needed = [a(ia(:), :), b(ib(:), :)];
这应该比使用
kron
repmat
快得多

基准 结果是:

Elapsed time is 0.030021 seconds.
Elapsed time is 0.17028 seconds.

thx,但我忘了说我需要matlab,我想利用matlab中矩阵计算的效率。很抱歉我错过了标签,是我的错。@Jennes是的,的确如此。如果您对本答案中的
find
的具体用法还有任何疑问,我将非常乐意解释。
Elapsed time is 0.030021 seconds.
Elapsed time is 0.17028 seconds.