更新日 : 2019年2月12日, 行列の転置(行と列を入れ替える)は、Tまたはtranspose()ですることができます!, arr1、arr2のそれぞれの要素同士で足し算、引き算が行われているのがわかったかと思います!, 行列の掛け算には、各要素同士を単純に掛けたものと、行列の積を求める場合と2パターンあります。, ・ 各要素の掛け算 4 & 5 \\ -1 & -1 & 3 & 0 & 0 & 1 \end{pmatrix}$$がAの逆行列になっています。, $$\begin{pmatrix} 高校数学/物理/化学と線形代数をメインに解説!いつ・どこでもわかりやすい、差が付く記事が読めます!社会人の方の学び直し(リカレント教育)にも最適です。, プロ講師(数学/物理/化学/英語/社会)兼個別指導塾YES主宰/当サイト「スマホで学ぶサイト、スマナビング!」を運営しています。/指導中、実際に生徒が苦手意識を持っている単元について解説記事を執筆。詳細は【運営元ページ】をご覧ください。, スマナビング!は、いつ・どこでも(独学でも)資格試験(電験三種、数検、統計検定・就活のためのSPI(非言語)etc,,,)対策や、テスト勉強対策が出来るサイトです。. -2 & 5 \\ \end{bmatrix}を行列Aとして、その逆行列A^{-1}を求める。$$, $$A^{-1}=\frac {1}{3× 2-5× 1}\begin{bmatrix} \end{bmatrix}+\begin{bmatrix} \end{pmatrix}\begin{pmatrix} x \\ 1 & 2 2 & -5 \\ }); 「Pythonの行列ってなんだろう?」 2 & 1 【NumPy入門 np.ndarray.size】配列の要素数がわかるsizeとlenの違い y \end{pmatrix}=\begin{bmatrix} \end{pmatrix}$$, $$\begin{pmatrix} googletag.cmd = googletag.cmd || []; 1 & 2 & 5 & 0 & 1 & 0 \\ googletag.pubads().collapseEmptyDivs(); 0 & -1 & -7 & 1 & -2 & 0 \\ 3 & 5 \\ \end{bmatrix}+\begin{bmatrix} pbjs.setConfig({bidderTimeout:2000}); その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。 NumPyでは以下のように計算することができます!, 行列をリストで扱う方法と比べるとNumPyを使用した方法は、とても簡単に計算できることがわかって頂けたかと思います!, 次項以降では、このNumPyを使用した行列計算の方法について様々な計算を試してきましょう!, NumPyの計算についてより詳しく知りたい方はこちらの記事でも紹介していますので参考にしてみてください。 \end{pmatrix}$$, $$ ② 3×3行列 \begin{pmatrix} a_{m,1} & \ldots & a_{m,n} \end{pmatrix}$$, ①においての行は(1,2)や(3,4)のことをいい、列は(1,3)や(2,4)のことを指します。, (ベクトルの成分表示を思い出してみて下さい:「ベクトルの成分表示とは?その意味と足し算・引き算」), $$2次元ベクトルは、2行1列\begin{pmatrix} 「機械学習で行列ってどういう時に使うんだろう?」, Pythonで行列計算を行うと、基本的な計算から複雑なものまで簡単に行うことができます!, 行列とはその名前の通り、横(行)と縦(列)方向の並びのからなる以下のような2次元のデータです。, もし学生時代に行列計算が苦手だった方も、計算自体は単純なものですので、Pythonのプログラミングと一緒に行列計算もマスターしちゃいましょう!, 以下のように、Pythonのリストの要素としてさらにリストを追加すると行列(2次元配列)として作成することができます。, 行列1と行列2(転置)をfor文でループして計算することにより、行列の計算結果を取得しています!, 今度は、Pythonの学術計算ライブラリであるNumPyを使用して行列計算をしてみましょう!, NumPyはNumPy配列(ndarrayと呼ばれている)を使用し、少ないコード量で様々な数値計算が簡単に行えるようになっています。, またNumPyはとても高速であるため、大量のデータを扱う場合など、Pythonを使いこなすには必須のライブラリでもあります。, 先程と同様に行列の積を計算してみましょう! 前回は行列の入力、出力、逆行列の勉強しました。今回は題名の通り、行列の和と積の計算をします。和の計算は簡単ですが、積の計算は少し難しいと思います。行列の和の計算では早速サンプルコードを見てみましょう。#include <stdio.h 【Python入門】numpyで計算をしてみよう \end{pmatrix}$$, ・さらに、2行目と3行目を入れ替えて、2列目は2行2列の成分のみ0になるように計算します。, $$\begin{pmatrix} \end{bmatrix}\begin{bmatrix} 3& 5 \end{bmatrix}B=\begin{bmatrix} 9 & 15 // fixed01のWORKSが不定期なため共通処理とする -c & a -1 & -2 \\ Pythonの画像処理ライブラリpillowの使い方をわかりやすく解説! 'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs'); 高校数学における有名ドコロの参考書です。例題がありその下に解答がのった問題集が青チャートです。カバーが青色のことから、そのように呼ばれています。ここでは、この青チャートについて紹介します。. 2 & 1 行列計算をしてみよう! それでは行列の計算方法について詳しく見ていきましょう! 行列の足し算、引き算をやってみよう! 行列の足し算、引き算は、通常の計算方法と変わりません。 行列の 各要素を足したり、引いた結果 を求めることができます。 \end{bmatrix}$$, 単位行列の特徴の一つである、「どんな行列との積も、掛けた行列になる」ことを利用します。, (これは、実数の世界で、「1」をどんな数と掛け合わせても、掛け合わせた数になることと同様です。), $$\begin{bmatrix} -1× 1 & -1× 2 \\ 2・ 3+\left( -5\right) ・ 1 & 2・ 5+\left( -5\right) ・ 2 \\ googletag.pubads().setTargeting('blog_type', 'Tech'); 1+2 & 3+2 \\ 0 & 0 & 1 & 1 & -1 & 1 a_{1,1}, & \ldots & a_{1,n} \\ 3 & 4 \end{pmatrix}の行列と言えます。$$, 2×2行列や、3×2行列などのうちは数が少ないので良いのですが、勉強を進めていくうちに、とても大きな数の行列を扱ったり、特定の「場所」の成分(=2行目3列目の数字などのことです)を書く必要が出てきます。, $$A=\begin{pmatrix} \left( -1\right) ・ 3+3・ 1 & \left( -1\right) ・ 5+3・2 4 & 5 \\ -1 & -1 & 3 4 & 5 \\ d & -b \\ \end{pmatrix}$$, 行列の足し算は、非常に簡単で、同じ成分を足していくだけです、実際に上の例で見てみましょう。, $$\begin{bmatrix} googletag.defineSlot('/21812778492/blog_300x600_common_sidemiddle01_adsense', [300, 600], 'div-gpt-ad-1571293897778-0').addService(googletag.pubads()); \end{bmatrix}と確かに単位行列になっています。$$, $$EB=\begin{pmatrix} 行列の転置 • 転置行列とは、元の行列の列と行を入れ換えて作っ た行列を言う。’ • MATLABでは行列Aの転置はA’と表す。’ • 行ベクトルを列ベクトルに変換する操作などに転置演 算がよく用いられる。’ ’ >>a=[4’11’3]’ a= 413 >>a'’ ans’= 4 1 3 3 こちらはnp.dot()を使用して計算をしています。 \end{pmatrix}$$, $$逆行列A^{-1}=\frac {1}{ad-bc}\begin{pmatrix} 1 & 2 & 5 \\ 0 & 2 & 2 & 6 1 & 2 1 & 3 \\ 実行結果には、行列の積の計算結果が確認できるかと思います。, 行列の割り算は各要素を割った結果になりますので、通常の割り算とほとんど変わりません!, NumPyの計算方法について詳しく知りたい方はこちらの記事でも紹介していますので参考にしてみてください! 著者:安井 真人(やすい まさと)@yasui_masatoさんをフォロー !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)? z 1 & 2 \\ \end{pmatrix}+\begin{pmatrix} \end{pmatrix}$$, この、"1/ad-bc"の分母の部分である“ad-bc”には名前が付いており、「行列式」と呼ばれます。, 線形代数において非常に大切なものなので、詳細については別の記事で詳しく取り上げます。, <線形代数(8)「3×3の行列式を求める”サラスの公式”」の解説記事をアップしました>, また、逆行列が存在する正方行列(行数と列数が同じ行列詳しくは≫「行列同士の掛け算の順序」)のことを「正則行列」と言います。, 一方で、上記のように行列式ad-bcが0である=逆行列が存在しない正方行列のことは「特異行列」と呼ばれます。, それぞれ2×2の正方行列A、B、Cについて、AB=Cが成立しており、かつAとCの成分が分かっている時に、行列Bを求める方法を考えてみます。, 実数の場合は、再掲する以下の図2のように逆数を両辺にかける事で求めることができました。, $$\begin{bmatrix} 1・ \left( -2\right) +2・ 2 & 1・ 5+2・ \left( -2\right) 3 & 5 <これまでの線形代数学の入門記事>:「0からわかる線形代数の解説記事一覧」 ここでは、行列の和と定数倍について例をあげながら解説します。 行列の和 行列の和に関しては各成分ごとに足し算するだけです。 行列の定数倍 行列の定数倍はそれぞれの成分に定数をかけるだけです。 特に難しい点はないかと思います。 2 2 & -5 \\ みてわかると思いますが、位置が同じ同士を足していくのが、行列の和の計算になりますので、必ず行列のサイズを同じにしてください。今回は2×3の行列なので、全ての行列を2×3行列にして計算をしてください。, 今までは2重ループのfor文でしたが、積の計算は3重ループとなります。複雑ですね。, サンプルコードを見ても難しいと思うので、処理の流れを写真を見ながら、考えていきましょう。, まず、左方の行列の列と右方の行列の行のサイズを同じにしないと計算できないので注意が必要です。, 分かりにくかったと思うので実際に求めてみました。どうでしょうか。これでだいぶ流れの方は掴めたかなと思うのであとは自分で考えてプログラムを作ってみるといいかもしれません。根気強くいきましょう。今日は以上で終了となります。ありがとうございました。, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。. 'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs'); 高校数学における有名ドコロの参考書です。例題がありその下に解答がのった問題集が青チャートです。カバーが青色のことから、そのように呼ばれています。ここでは、この青チャートについて紹介します。. googletag.defineSlot('/21812778492/blog_468x60_common_eyecatch02_adsence', [728, 90], 'div-gpt-ad-1567575393317-0').addService(googletag.pubads()); \end{bmatrix}$$, $$=\begin{bmatrix} 0 & 1 & 8 & 0 & 1 & 1 \end{pmatrix}$$, $$行列B=\begin{pmatrix} googletag.defineSlot('/21812778492/blog_300x250_common_ctc01_adsence', [300, 250], 'div-gpt-ad-1566564396953-0').addService(googletag.pubads()); -1 & 3 -2 & 5 \\ 今回は、線形代数学入門の第三回として、行列の割り算を普通の数と対応させて紹介していきます。, ・このシリーズは、行列(線形代数)を0から大学での本格的な線形代数学への橋渡しをするものです。, 以下の<図1>の様に、数と行列、逆数と逆行列、1と単位行列Eがそれぞれ対応しているのです。(詳しく説明します。), それと同様の考え方をすれば、「行列を割り算したい」→「その行列の逆行列を掛ければ良い」となります。, では、その逆行列は常に求まるのでしょうか?また、どのようにして逆行列を計算するのかここから解説していきます。, 実数の時を思い出してみると、例えば0の逆数を考えてみます。逆数「1/0」(分母が0)は存在しませんね?。, $$行列A=\begin{pmatrix} googletag.defineSlot('/21812778492/blog_300x250_common_ctc02_adsence', [300, 250], 'div-gpt-ad-1566564559478-0').addService(googletag.pubads()); 2 & 2 \\ googletag.defineSlot('/21812778492/blog_300x250_common_fixed01', [[300, 250], [336, 280]], 'div-gpt-ad-1559710191960-0').addService(googletag.pubads()); スマホで学ぶサイト、 スマナビング! All Rights Reserved. 1 & 2 4 & 3 1 & 3 \\ 1 & -1 & 1 11 & -12 & 9 \\ そして行列の足し算/ ... では、その逆行列は常に求まるのでしょうか?また、どのようにして逆行列を計算するのかここから解説していきます。 逆行列は存在しない事もある. 2 & 2 1 & 2 3× 3 & 5× 3 2 & -5 \\ -1 & 3 2 & 2 \\ cos⁡60∘=12、sin⁡60∘=32 なので、回転させた点 (X,Y)は、 (XY)=(cos⁡60∘−sin⁡60∘sin⁡60∘cos⁡60∘)(xy)=(12−323212)(40)=(223) なお、行列の積については、行列の積の計算方法と例題をどうぞ。 余談:この回転の公式は、昔は高校数学で習っていました(行 … \end{bmatrix}=$$, $$\begin{bmatrix} pbjs.que=pbjs.que||[]; 3 & 4 \end{bmatrix}$$, $$=\begin{pmatrix} \end{pmatrix}$$, $$\begin{pmatrix} \end{bmatrix}\begin{bmatrix} 機械学習に必須!Pythonで高速に行列計算ができるNumPyに入門! 6 & 6 \\ 3 & 5 \\ 1 & 2 & 5 \\ 4 & 3 googletag.defineSlot('/21812778492/blog_728x90_common_overlay_adsence', [728, 90], 'div-gpt-ad-1583302554779-0').addService(googletag.pubads()); \end{bmatrix}$$, $$3× \begin{bmatrix} googletag.cmd.push(function() { \end{pmatrix}$$(x、y), $$3次元ベクトルは、3行1列\begin{pmatrix} 2 & 1 googletag.defineSlot('/21812778492/blog_728x90_common_eyecatch01_adsence', [728, 90], 'div-gpt-ad-1566564252373-0').addService(googletag.pubads()); 1 & 4 \\ (adsbygoogle=window.adsbygoogle||[]).push({}); ここでは、上述した通り『掃き出し法』の要領で逆行列を求めますが、先ほどの逆行列の作り方(1)と何が違うのか、少し触れておきます。, 上の方法(1)で紹介した方法は、2×2サイズの行列のみにしか適用できませんでした。, が、掃き出し法を使用した今回の方法を使うと、正則であれば、3×3・4×4・・・とサイズが大きくなっても逆行列を求めることができます。, 手順は非常に単純なので、第8回・第9回の掃き出し法をマスターしていれば普通の計算を繰り返すだけで逆行列を作ることが可能です。, ここでは例として、$$A=\begin{pmatrix} 3 & 6 \\ \end{pmatrix}\begin{pmatrix} \end{bmatrix}+\begin{bmatrix} 1 & 0 & -11 & 0 & -1 & -2 \\ 注意!:行列同士の足し算・引き算は行と列の数が同じもの出ないと計算できません。 $$\begin{pmatrix} 1 & 3 \\ 2 & 4 \end{pmatrix}+\begin{pmatrix} 2 & 2 \\ 1 & 1 \end{pmatrix}$$ の様に、2行2列の行列と2行2列の行列は計算できますが、 googletag.defineSlot('/21812778492/blog_300x250_common_fixed01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565194485392-0').addService(googletag.pubads()); googletag.defineSlot('/21812778492/blog_300x250_common_fixed02_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565198391774-0').addService(googletag.pubads()); 0 & 1 & 0 & -8 & 9 & -7 \\ (adsbygoogle = window.adsbygoogle || []).push({}); Copyright 2015-2020 All rights reserved. \end{pmatrix}+\begin{pmatrix} \end{pmatrix}$$, $$\begin{pmatrix} 更新日 : 2020年3月3日, ここではNumPyを使用する上で必要となる基本的な使い方について確認しておきましょう!, 行列を扱うのに「行の要素がいくつあるのか」「列の要素がいくつあるのか」など、行列がどんな形をしているのか調べたい時がありますよね!, 行列の要素数を取得するには、以下のサンプルコードのようにshapeを使用します! 1 & 9 & 9 & 3 \\ -1× 2 & -1× 2 \end{bmatrix}の時、2× 2 の行列Bを求めよ$$, $$\begin{bmatrix} \end{bmatrix}=\begin{bmatrix} その後、変換した画像配列をリストに10回詰めて、ファイルとして保存しています。, pillowについて詳しく学習したい方はこちらの記事に記載されています。 -1 & 3 2 & 4 各行列の要素同士で掛け算が行われていることが実行結果からわかります!, ・ 行列の積 1 & 1 更新日 : 2019年5月8日, リサイズされた10枚の画像が「save.npy」の1ファイルに保存されていますのでかなりポータブルになったと思います!, np.load()でファイルを読み込み、for文でリストの要素をループして1画像ずつ処理をしています!, 先程作成した10枚のリサイズされた画像がカレントディレクトリに作成されるかと思います!, NumPyでの行列の操作は、複雑な計算処理や機械学習などでも使用されていてPythonを扱う上ではとても重要なものとなりますので、しっかりとマスターしていきましょう!, 当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。 スマホで学ぶサイト、 スマナビング! All Rights Reserved. 1 & 2 \end{bmatrix}$$, $$よって、A^{-1}=\begin{bmatrix} 2 & -5 \\ 2 & 1 更新日 : 2020年5月21日, 画像データを読み込んでNumPy配列として扱うことによって、NumPyの機能で様々な処理を行うことができるようになるのです!, またPythonのNumPyデータとして画像を保持できるため、プログラミングでの処理で大変扱いやすくなるのです!, それでは行列操作のまとめてとして、画像データをNumPy配列に変換してみましょう!, サンプルコードでは、画像を読み込んだ後に画像をリサイズし、NumPyの配列(3次元の配列)に変換しています。 2 & 5 \\ それぞれarr1は2×2、arr2は2×4の行列であることがわかります。, NumPyのsizeについてより詳しく知りたい方は、こちらの記事でも紹介されています! 2 & 2 & -4 1 & 3 \\ \end{pmatrix}$$, $$=\begin{pmatrix} \end{bmatrix}B$$, $$(右辺)=\begin{bmatrix} 0 & 1 & 8 & 0 & 1 & 1 \\ 1 & 1 \end{bmatrix}$$, $$(左辺)=\begin{bmatrix} \end{bmatrix}は、$$, $$\begin{bmatrix} -1・ 4+3・ 2 & \left( -1\right) ・ 5+3・ 1 -1 & 3 2 & 4 旧課程では、現数Ⅲが数学Ⅲ・C(数Cに行列が入っていました)に分かれており、理系であれば必ず履修したのです。, そこで、旧数Cと大学の線形代数学の入り口を学ぶための記事シリーズを作ることにしました。, (※:入り口なので、厳密さよりも分かりやすさを優先させています。シリーズを読んで大まかに理解出来れば、スムーズに厳密な線形代数学に進める様にしました), ※:<線形代数入門第0回;集合と写像をわかりやすく>を作成しました。今後の線形写像などを学ぶ際に理解している必要があるので、余裕があればご覧下さい。, 線形代数の「代数」はその名の通り「数の代わりにxの様な文字を置いて計算する」という意味です。, 今の所は、「直線」や、一次方程式の様なまっすぐな性質を持つもの、を線形と言うと思っていてください。例えば、「微分積分のまとめ記事」の冒頭でも少し解説していますが、一番上の様な性質を”線形性”と言います。, とはいえ、いきなり言葉の意味にとらわれてしまうと、前に進めないのでこのあたりで「行列」の解説に進みたいと思います。, 取りあえず最初は、行列(以下で解説します)について学ぶ=「線形代数学」と考えておいてください。, さて、行列とは一体どういったものなのでしょうか。行列(線形代数学)はもともと連立方程式を解くために生まれ、発達してきたものです。, この連立方程式を解く際には、普通は「代入」したり、「加減法」を使って解いていきます。, 2式を6倍して、1式を引き、xを求めて、元の2式にxを代入することでyが求まります。, この様に、人間が連立方程式を解いていく際には色々な試行錯誤をしながら解を出します。, これくらいの方程式では普通に解けてしまうので良いのですが、もっと複雑な問題ではどうでしょうか?, 未知数(文字)が何十個も出てきたりすると「試行錯誤」をするのは大変困難になってきます。, そこで、行列を使うと非常に複雑な問題であっても「単純な計算を繰り返すだけ」で解を求めたり、, points!「単純な計算を繰り返す」という行為は人間にとっては苦痛でしかないのですが、機械はそれを驚く程早くこなします。, 線形代数、行列を学んでいく事でコンピュータがどの様にして動くのか(アルゴリズム)や、今話題のAI(とその中に存在する『機械学習』・『ディープラーニング』)などと非常に深いつながりがある事が分かります。, このことについては、→「機械学習とは?0から学ぶ解説記事まとめ」で解説しています。, 行列では、横方向の並びのことを“行”、縦方向の並びのことを「列」と呼びます。実際に数字で見てみましょう。, $$① 2×2行列\begin{pmatrix} 2 & 5 \\ 行列の掛け算の定義 定義を述べるより実例をいくつか出して計算方法を体に覚えさせた方が早く身につきます。以下にいくつか行列の掛け算の例をあげていきます。 1行1列の場合 行列の掛け算を定義します。まず、一行だけの行列と一列だけの行列の積を 1 & -1 & 1 1 \\ ベクトルの際、和と定数倍を導入しました。行列においても和と定数倍を導入することができます。ここでは、行列の和と定数倍について例をあげながら解説します。. 3 & 5 \\ 2 & -2 転置行列のよく用いられる性質 (線形性・積・逆行列・固有値・行列式・トレース・ランク・内積と転置の関係など)と公式・例をリスト形式でまとめました。各項目には分かりやすい証明が置かれています。よろしければご覧ください。 行列には定数倍だけでなく、行列どおしの掛け算もよく使用します。ここでは、この行列どおしの掛け算の計算方法について解説します。, 定義を述べるより実例をいくつか出して計算方法を体に覚えさせた方が早く身につきます。以下にいくつか行列の掛け算の例をあげていきます。, と定義します。ベクトルの内積と似てますね。掛け合わせる際に相手が必要なので、はじめの行列の列とあとの行列の行が同じである必要があります。, 左から右へ計算していき、順に下に下がって計算していきます。慣れていけばスムーズに計算できるので練習してみてください。.