4

行列「x」と行ベクトル「v」があります。行ベクトルの要素数は、行列の列数と同じです。次の操作を行うための定義済み関数はありますか?

for c = 1 : columns(x)
    for r = 1 : rows(x)
        x(r, c) -= v(c);
    end
end
4

3 に答える 3

9
bsxfun(@minus,x,v)

オクターブのデモは次のとおりです。

octave>  x = [1 2 3;2 3 4]
x =

   1   2   3
   2   3   4

octave> v = [2 0 1]
v =

   2   0   1

octave> 
octave> z=bsxfun(@minus,x,v)
z =

  -1   2   2
   0   3   3
于 2012-09-22T20:21:55.567 に答える
3

Octave 3.6.0以降を使用している場合はbsxfun、Octaveが自動ブロードキャストを実行するため、使用する必要はありません(これは実際に使用するのと同じbsxfunですが、見た目が簡単です)。例えば:

octave>  x = [1 2 3; 2 3 4]
x =

   1   2   3
   2   3   4

octave> v = [2 0 1]
v =

   2   0   1

octave> z = x - v
z =

  -1   2   2
   0   3   3
于 2012-09-24T07:07:26.823 に答える
3

または、ベクトルを複製して、行列から直接減算することもできます

z = x-repmat(v, size(x, 1), 1);
于 2012-09-22T21:01:27.880 に答える