粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

ベクトルの列方向への複製

最近MATLAB関連の記事しか書いてないな。

上顎の親知らずの歯ブラシ届かない所が明らかに虫歯でガッツリ陥没していて
じわじわ歯痛を感じつつある今日このごろ。本当に怖い。
親知らずなんで要らんとこに生えるねん…


今回は次のようなことがしたいんす。

 
\begin{bmatrix}
a&b&c\\
d&e&f\\
g&h&i
\end{bmatrix}
から \begin{bmatrix}
a-x&b-x&c-x\\
d-y&e-y&f-y\\
g-z&h-z&i-z
\end{bmatrix}

というのを計算したい。
しかし,じみーにこれが痒いところに手が届かない。

 
\begin{bmatrix}
x\\
y\\
z
\end{bmatrix}
は上の行列とサイズが違うからね。


ぱっと思いつく解決策は先ほどのベクトルを横にかさ増ししてそのまま引き算をするという方法。


行列の連結にはhorzcatという関数が用意されているが,今回は同じ列ベクトルをかさ増ししたいのでこれには向かない。
そんなあなたにrepmatという関数がオススメ(?)。

例えばAというベクトルを行方向に1回,列方向に4回繰り返した行列は

A = (1:3)';
B = repmat(A,1,4);

こんな感じに作成できる。


というわけでさっきの列ベクトルを複製しまくってはい解決。
人間の歯も何度でも複製して貼り付けられればいいのに。