Python:NumPyを使ったベクトル、行列、配列
このレッスンでは、PythonのNumPyライブラリを使用して、ベクトル、行列、配列で遊ぶためのいくつかのきちんとしたヒントとトリックを見ていきます。 このレッスンは、データサイエンスを始めていて、これらのコンポーネントの数学的な概要と、コードでNumPyを使用してそれらをどのように再生するかが必NumPyライブラリを使用すると、ベクトル、行列、配列など、機械学習やデータ科学でよく使用されるデータ構造に対して行う必要があるさまざまな操作を実行で 多くの機械学習パイプラインで使用されているNumPyで最も一般的な操作のみを表示します。 最後に、NumPyは操作を実行するための単なる方法であるため、NumPyパッケージ自体ではなく、このレッスンの主な焦点である数学的な操作に注意してくださ 始めよう
ベクトルとは何ですか?Googleによると、ベクトルは方向と大きさを持つ量であり、特に空間内のある点の位置を別の点と比較して決定するものです。
ベクトルは、大きさだけでなく特徴の方向も記述するため、機械学習では非常に重要です。 次のコードスニペットを使用してNumPyでベクトルを作成できます。
row_vector=np。array()
print(row_vector)
上記のコードスニペットでは、行ベクトルを作成しました。 列ベクトルを次のように作成することもできます。
col_vector=np。array(,,])
print(col_vector)
行列を作る
行列は単純に二次元配列として理解することができます。 多次元配列を作ることでNumPyで行列を作ることができます:
print(matrix)
matrixは多次元配列とまったく似ていますが、matrixデータ構造は二つの理由により推奨されていません:
- NumPyパッケージに関しては、配列が標準です
- NumPyを使用した操作のほとんどは、配列を返し、行列ではありません
スパース行列を使用して
思い出させるために、スパース行列は、ほとんどの項目がゼロであるものです。 現在、データ処理と機械学習の一般的なシナリオは、要素のほとんどがゼロである行列を処理することです。 たとえば、行がYoutube上のすべての動画を表し、列が各登録ユーザーを表す行列を考えます。 各値は、ユーザーがビデオを視聴したかどうかを表します。 もちろん、この行列の値の大部分はゼロになります。 スパース行列の利点は、ゼロの値を格納しないことです。 これは巨大な計算の利点および貯蔵の最適化でまた起因する。
ここでspark行列を作成してみましょう。
コードの仕組みを理解するために、ここで出力を見ていきます。
上記のコードでは、NumPyの関数を使用して、ゼロ以外の要素がゼロベースのインデックスを使用して表される圧縮されたスパース行行列を作成しました。 スパース行列には、次のようなさまざまな種類があります:
- 圧縮されたスパース列
- リストのリスト
- キーの辞書
ここでは他のスパース行列に飛び込むことはありませんが、それらのisの使用は特定であり、誰も”ベスト”と呼ぶことができないことを知っています。
すべてのベクトル要素に操作を適用する
複数のベクトル要素に共通の操作を適用する必要がある場合は、一般的なシナリオです。 これは、ラムダを定義し、同じベクトル化することによって行うことができます。 同じコードスニペットを見てみましょう:
,
])
mul_5=ラムダx: x*5
vectorized_mul_5=np.vectorize(mul_5)
vectorized_mul_5(matrix)
コードの仕組みを理解するために、ここで出力を見ていきます。
上記のコードスニペットでは、NumPyライブラリの一部であるvectorize関数を使用して、単純なラムダ定義をベクトルの各要素を処理できる関数に変換しました。 Vectorizeは要素のループに過ぎず、プログラムのパフォーマンスには影響しないことに注意することが重要です。 つまり、上記の複雑なコードの代わりに、
結果はまったく同じでした。 私は最初に複雑な部分を見せたかったのですが、そうでなければセクションをスキップしていたでしょう!
平均、分散、標準偏差
NumPyを使用すると、ベクトルの記述統計に関連する操作を簡単に実行できます。 ベクトルの平均は、次のように計算できます。
ベクトルの分散は次のように計算できます。
ベクトルの標準偏差は、次のように計算できます。
与えられた行列上の上記のコマンドの出力はここに与えられます:
行列を転置する
転置は、行列に囲まれているときに聞くことができる非常に一般的な操作です。 転置は、行列の列値と行値を交換するだけの方法です。 ベクトルは単なる値の集まりであり、それらの値が行と列に分類されていないため、ベクトルを転置することはできません。 行ベクトルを列ベクトルに変換することは、(このレッスンの範囲外である線形代数の定義に基づいて)転置されないことに注意してください。
今のところ、行列を転置するだけで平和を見つけるでしょう。 NumPyで行列の転置にアクセスするのは非常に簡単です:
与えられた行列に対する上記のコマンドの出力はここに与えられます:行ベクトルに対して同じ操作を実行して、列ベクトルに変換することができます。
列ベクトルに変換することができます。
行列を平坦化する
行列の要素を線形に処理したい場合は、行列を一次元配列に変換することができます。 これは、次のコードスニペットで行うことができます。
与えられた行列上の上記のコマンドの出力はここに与えられます:
flatten行列は一次元配列であり、単純に線形であることに注
固有値と固有ベクトルの計算
固有ベクトルは、機械学習パッケージで非常に一般的に使用されています。 したがって、線形変換関数が行列として提示された場合、X、固有ベクトルは、ベクトルのスケールでのみ変化するが、その方向は変化しないベクトルです。 ここで、Xは正方行列であり、λは固有値を含む。 また、vには固有ベクトルが含まれています。 NumPyを使用すると、固有値と固有ベクトルを簡単に計算できます。 ここでは、同じことを示すコードスニペットを示します:
与えられた行列上の上記のコマンドの出力はここに与えられます:
ベクトルのドット積
ベクトルのドット積は、2つのベクトルを乗算する方法です。 これは、ベクトルが同じ方向(直交と呼ばれる)にどれだけ少ないかを示す外積とは対照的に、ベクトルのどれくらいが同じ方向にあるかを示します。 ここでは、コードスニペットに記載されているように、2つのベクトルの内積を計算できます:p>
b=np.配列()
np.dot(a,b)
与えられた配列に対する上記のコマンドの出力はここに与えられます:
行列の加算、減算、乗算
複数の行列の加算と減算は、行列では非常に簡単な操作です。 これを行うには2つの方法があります。 これらの操作を実行するコードスニペットを見てみましょう。 これを単純にするために、同じ行列を2回使用します:
次に、二つの行列を次のように減算することができます。
指定された行列に対する上記のコマンドの出力は次のようになります。
期待どおり、行列内の各要素は対応する要素で加算/減算されます。 行列を乗算することは、前に行ったように内積を見つけることに似ています。
上記のコードは、次のように与えられた二つの行列の真の乗算値を見つけます:p>
与えられた行列上の上記のコマンドの出力はここに与えられます:
結論
このレッスンでは、一般的にデータ処理、記述統計、データサイエンスで使用されるベクトル、行列、配列に関連する多くの数学演算を行いました。 これは、さまざまな概念の中で最も一般的で最も重要なセクションのみをカバーする簡単なレッスンでしたが、これらの操作は、これらのデータ構造を
@linuxhintと@sbmaggarwalとTwitterでレッスンについてのフィードバックを自由に共有してください(それは私です!).