2

この問題は、おそらくMatlabとは関係がなく、行列代数(大学のコースではほとんど忘れています)に関係しています。m x n行列Xm x 1行列があるとしBます。Xのth行のすべての要素がBのth行で区分的に分割され、別の行列になるように、をどのように除算しXますか?Biim x nY

例えば

X = [2 4 8; 3 9 27; 4 16 64]
B = [2; 3; 4]

X ? B = [2/2 4/2 8/2; 3/3 9/3 27/3; 4/4 16/4 64/4]
ans   = 
           1     2     4
           1     3     9
           1     4    16
4

4 に答える 4

11

使用しない方がよいrepmat-低速で、ワークスペースに追加のメモリを割り当てます。bsxfun組み込み関数であるを使用できるため、より高速で、余分なワークスペースを回避できます。

X = [2 4 8; 3 9 27; 4 16 64]
B = [2; 3; 4]
bsxfun(@rdivide, X, B)

ans =

 1     2     4
 1     3     9
 1     4    16
于 2012-11-21T11:12:48.767 に答える
1

Junuxxのコメントは、私を正しい方向に向けました。私が欲しいものを手に入れるために使用した解決策は次のとおりです。

B_prime = repmat(B,1,3)

X ./ B_prime

ans =

 1     2     4
 1     3     9
 1     4    16

この種の操作が何と呼ばれるのか(正式な名前さえあれば)知りたいのですが。

于 2012-11-21T10:59:18.310 に答える
0

Xはm x n、Bはm x 1

size(X,2)nの値、つまり列数を示します

したがって、次のことを行う必要があります。

X./repmat(B,1,size(X,2))
于 2012-11-21T11:19:33.860 に答える
0

X = [2 4 8; 3 9 27; 4 16 64]

B = [2; 3; 4]

Result = X./ B(:、ones(1,3))%はrepmatよりも高速です

結果=

 1     2     4
 1     3     9
 1     4    16
于 2012-11-21T16:20:50.810 に答える