0

以下に示すように、2つのマトリックスがあるとします。

A =  17    33    49    65    81    97   113   129   145   161   177

B =  31    57    83   109   135

私はこのようなセルにそれらを入れたい:

[31, 17]      [57, 17]       [83, 17]      [109, 17]     [135, 17]
[31, 33]      [57, 33]       [83, 33]      [109, 33]     [135, 33]
[31, 49]      [57, 49]       [83, 49]      [109, 49]     [135, 49]
[31, 65]      [57, 65]       [83, 65]      [109, 65]     [135, 65]
[31, 81]      [57, 81]       [83, 81]      [109, 81]     [135, 81]
[31, 97]      [57, 97]       [83, 97]      [109, 97]     [135, 97]
[31, 113]     [57, 113]      [83, 113]     [109, 113]    [135, 113]
[31, 129]     [57, 129]      [83, 129]     [109, 129]    [135, 129]
[31, 145]     [57, 145]      [83, 145]     [109, 145]    [135, 145]
[31, 161]     [57, 161]      [83, 161]     [109, 161]    [135, 161]
[31, 177]     [57, 177]      [83, 177]     [109, 177]    [135, 177]

Cコードを使用してMatlabでそれを行うにはどうすればよいですか?

4

2 に答える 2

0

ネイティブ MATLAB ソリューション

meshgrid異なるセットから可能なすべての値のペアのリストを生成するのに役立つ場合があります。

[X, Y] = meshgrid(B, A);
C = reshape(arrayfun(@horzcat, X(:), Y(:), 'Uniform', 0), numel(A), numel(B));

C探している結果を保持します。

A次のとの例を見てみましょうB:

A = [10 20 30 40];
B = [1 2 3];

の目的はmeshgrid、次元に沿ってベクトルを複製する行列を作成することです。したがって、ベクトルBは最初の次元にA沿って複製され、2 番目の次元に沿って複製されます。の結果[X, Y] = meshgrid(B, A)は次のとおりです。

X =
    10    20    30    40
    10    20    30    40
    10    20    30    40


Y =
     1     1     1     1
     2     2     2     2
     3     3     3     3

両方のベクトルが複製され、同じ次元の行列が生成されます。

については、 を列ごとに連結して列ベクトルに変換X(:)することを意味します。XしたがってX(:)、結果は になり[10; 10; 10; 20; 20; 20; 30; 30; 30; ...]ます。についても同様Y(:)です。

ここで注意が必要なのは、入力ベクトルの各要素に個別にarrayfun関数 (この場合horzcat、単純に水平方向の連結を意味する ) を適用することです。この場合、2 つの入力ベクトル と がX(:)ありY(:)、対応する要素の各ペアにarrayfun適用さhorzcatれ、最終的に と のすべての可能な組み合わせが生成XされYます。
また、各連結結果はベクトル (2 つの値を含む) であるため、の出力はarrayfunセル配列でなければならず、'UniformOutput' というフラグを false に設定する必要があります。公式ドキュメントを読んで理解を深めること
をお勧めします。arrayfun

最後の部分はreshapeで、出力セル配列の次元を例の次元と一致するように調整します (行数は の長さとA一致し、列数は の長さと一致しますB)。

これにより、このソリューションが少し解決されることを願っています。

于 2013-03-21T11:26:15.530 に答える
0
output = zeros(length(A)*length(B),2);
for i=1:length(B)
  for j=1:length(A)
     output(length(A)*(i-1)+j,:) = [B(i) A(j)];
  end
end
于 2013-03-21T11:20:10.037 に答える