質問

MATLABで次のような2つのベクトルを結合する方法はありますか

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

次のような通常のMATLAB構文を使用します。

mat = C * S(1:length(S))

これにより、「内部マトリックスの次元はエラーに一致する必要があります」通常の行列演算を実行しようとしているためです。これは標準の線形代数演算ではないため、MATLABで正しく表現する方法はわかりませんが、MATLABでは非常に遅いループを必要とせずに実行できるはずです。

役に立ちましたか?

解決

あなたの説明から、それは単純な行列演算のように聞こえます。 C S に適切なサイズを確保する必要があります。 C は列ベクトル( length(C)行1列)であり、 S は行ベクトル(1行< strong> length(S))。それらが正しい寸法であると仮定して、次のことを行ってください:

mat = C*S;

寸法がわからない場合、これは機能するはずです:

mat = (C(:))*(S(:)');

編集:実際、私は括弧に少し夢中になりました。いくつかは、操作の順序に関する懸念がないため、不要です。クリーンバージョンを次に示します。

mat = C(:)*S(:)';

説明:

MATLABの行列乗算演算子 内部製品(結果はスカラー値)または外部製品(マトリックスになります)は、適用されるベクトルの次元に依存します。

上記の最後の式は、コロン演算子を使用して、ベクトル引数の次元を変更します。構文 C(:)は、 C の内容を単一の列ベクトルに変形します。構文 S(:) 'は、 S の内容を列ベクトルに変形し、行ベクトルに転置します。乗算すると、サイズ( length(C) x length(S))のマトリックスになります。

注:このコロン演算子の使用は、任意の次元のベクトルと行列に適用でき、その内容を単一の列ベクトルに変更できます(これにより、< a href = "https://stackoverflow.com/questions/709872/multi-dimension-any">他のSO質問)。

他のヒント

MATLABでこれを実行してみてください:

mat = C*S'

As In:

C = [1; 2; 3];
S = [2; 2; 9; 1];

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

% Equivalent code:
mat2 = C*S';

myDiff = mat - mat2

次の意味ですか?

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

もしそうなら、それは単に行列の乗算です:

C' * S    % if C and S are row vectors
C * S'    % if C and S are column vectors

C S が行ベクトルなのか列ベクトルなのかわからない場合は、トリックを使用してそれらを列ベクトルに変換してから、 S を乗算する前に:

C(:) * S(:)'

あなたが何をしているのか完全にはわかりません-結果のマトリックスは length(C)行で構成され、 i 番目の行 C i 番目のエントリでスケーリングされたベクトル S です(ベクトルの添字付けによりスカラーが得られるため)。この場合、次のようなことができます

mat = repmat(C,[1 length(S)]) .* repmat(S, [length(C) 1])

列全体で C をタイル表示し、 S で行をタイル表示します。

これを試してください:

C = 1:3 S = 1:5 mat1 = C '* S

mat2 = bsxfun(@times、C '、S)

(必要な関数がより単純なMATLAB表記ではない場合は特に良い)

-ローレン

meshgridを使用してみてください:

[Cm, Sm] = meshgrid(C, S);
mat = Cm .* Sm;

編集:気にしないで、行列の乗算も行います。 1つの列ベクトルCと1つの行ベクトルSが必要です。その後、C * Sを実行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top