機械学習とニューラルネットワーク - ページ 67

 

2.4 K 最近傍のビッグ O (L02:最近傍法)



2.4 K 最近傍のビッグ O (L02:最近傍法)

ここで、実行時の複雑さのトピックに、特に Big O 表記法と k 最近傍 (KNN) アルゴリズムの実行時の複雑さに焦点を当ててみましょう。

Big O 記法は、コンピューター サイエンスでアルゴリズムの効率を分析するために使用される概念です。これは主に実行時の複雑さを指し、入力サイズの増加に応じてアルゴリズムの実行速度がどのように動作するかを決定します。さらに、Big O 表記法は、アルゴリズムのメモリ効率を分析するために使用することもでき、アルゴリズムの実行に必要なメモリ量を示します。

KNN の場合、トレーニング ステップにはトレーニング データセットの保存が含まれますが、これはメモリを大量に消費する可能性があります。大規模なトレーニング データセットを保存するには、大量の RAM またはハード ドライブのストレージ スペースが必要になる場合があります。ストレージ スペースは時間の経過とともに安価になりましたが、数百万の画像などの大規模なデータセットを扱う場合には依然として制限が生じる可能性があります。

ただし、予測ステップ中の KNN の実行時の複雑さに焦点を移してみましょう。先に進む前に、Big O 記法について簡単に紹介しましょう。これはアルゴリズムの効率を記述するために使用される表記法であり、通常は関数によって表されます。これらの関数は、アルゴリズムの実行時の複雑さを表します。一般的な例には、O(1) (定数)、O(log n) (対数) などが含まれます。これらの関数は、アルゴリズムの実行時間が入力サイズ (n) に応じてどのようにスケールされるかを示します。

実行時の複雑さをより深く理解するために、O(1) から指数関数的な複雑さまで、関数を効率の昇順に並べることができます。この文脈では、定数関数は入力サイズの影響を受けず、一貫した実行速度を保証するため理想的です。対数関数や線形関数も効率的ですが、定数関数ほど理想的ではありません。ただし、複雑さが 2 次、3 次、指数関数に増加するにつれて、アルゴリズムの効率は大幅に低下します。指数関数的な複雑さは特に有害であり、特に機械学習で大規模なデータセットを扱う場合には避けるべきです。

実行時の複雑さを n (入力サイズ) の観点から視覚化するには、x 軸が n を表し、y 軸がアルゴリズムの複雑さを表すプロットを作成できます。 n が増加すると、特定の関数のパフォーマンスがますます低下します。二次関数、三次関数、指数関数などの複雑性の高いアルゴリズムは、実行時間が過度に長くなる可能性があるため、避けることが重要です。

ここで、特定の関数の Big O 表記をどのように導き出すかを見てみましょう。たとえば、二次関数 f(x) = ax^2 + bx + c について考えてみましょう。 Big O 表記を導き出す際には、最も速く成長する支配的な項に焦点を当てます。この場合、支配項は x^2 です。したがって、この関数の Big O 表記は O(x^2) となり、二次複雑さを示します。

このプロセスをさらに詳しく説明するために、別の関数を考えてみましょう。関数 f(x) = ax(log x) があるとします。もう一度、x(log x) という支配的な項を特定します。ここでは、定数因子 a を無視し、項 x(log x) に焦点を当てます。したがって、この関数の Big O 表記は O(x log x) となり、対数線形計算量を示します。

対数の底 (たとえば、対数 2 を底とする対数や自然対数) は Big O 表記に影響を与えないことに注意してください。異なるベースはスケーリング係数を導入するだけであり、実行時の複雑さを決定する際には無視できます。したがって、簡単にするために、通常は底を指定せずに自然対数 (log) を考慮します。

理解をさらに深めるために、行列乗算の Python 関数を調べて、計算アルゴリズムへの Big O 表記法の適用を示します。この関数は、2 つの行列 A と B の間で行列の乗算を実行します。説明のために実装は意図的に非効率ですが、実行時の複雑さを分析することができます。

この関数は、サイズ nxn の空の行列 C を初期化することから始まります。ここで、n は入力行列の次元です。次に、行列 A の各行 i と行列 B の各列 j を繰り返します。ネストされたループ内で、行列 A の行 i と行列 B の列 j の内積を計算し、結果を行列 A の対応するセルに格納します。マトリックスC。

行列乗算関数の Python コードは次のとおりです。

def matrix_multiplication(A, B):
    n = len(A)  # Assuming square matrices of size n x n
    C = [[ 0 ] * n for _ in range(n)]  # Initialize matrix C
    
     for i in range(n):
         for j in range(n):
             for k in range(n):
                C[i][j] += A[i][k] * B[k][j]  # Calculate dot product and update C[i][j]
    
    return C
この関数の実行時の複雑さを分析するために、関数を分解してみましょう。外側のループは n 回反復し、行列 A の行を表します。2 番目のループも n 回反復し、行列 B の列を表します。これらのループの内側には、同様に n 回反復するネストされたループがあり、内積計算を表します。したがって、全体の複雑さは O(n^3) であり、3 次複雑さを示します。

特に n の値が大きい場合、3 次複雑さは理想的ではないことに注意することが重要です。入力サイズが増加すると、この関数の実行時間は大幅に長くなります。したがって、より大きな行列の場合は、Strassen アルゴリズムや、O(n^2.81) などの実行時の複雑さを改善する他の最適化されたアプローチなど、より効率的なアルゴリズムを使用して行列の乗算を実行する必要があります。

要約すると、アルゴリズムの効率とスケーラビリティを評価するには、Big O 表記で示されるアルゴリズムの実行時の複雑さを理解することが重要です。これにより、入力サイズの増加に伴うアルゴリズムのパフォーマンスを推定できるため、さまざまなシナリオに最適なアルゴリズムを選択し、大規模なデータセットの非効率的なアルゴリズムを回避できるようになります。

2.4 Big O of K-nearest neighbors (L02: Nearest Neighbor Methods)
2.4 Big O of K-nearest neighbors (L02: Nearest Neighbor Methods)
  • 2020.09.08
  • www.youtube.com
In this video, we are looking at the Big-O runtime complexity of a naive implementation of k-nearest neighbors-------This video is part of my Introduction of...
 

2.5 k 最近傍法の改善 (L02:最近傍法)



2.5 k 最近傍法の改善 (L02:最近傍法)

このビデオでは、特定の変更とハイパーパラメーターの考慮を通じて K 最近傍アルゴリズムを改善するというトピックを詳しく掘り下げます。前回のビデオでは、最近傍を見つける効率を高めるためのデータ構造としての優先キューの使用について説明しました。この優先キューは、新しいネイバーごとにトレーニング セット全体を検索するのを避けるのに役立ちます。

ここで、空間分割データ構造を利用して、K 最近傍アルゴリズムの計算パフォーマンスを向上させる別のアプローチを検討してみましょう。このようなデータ構造の 1 つはヒープです。ヒープは、トレーニング サンプルの検索プロセスを促進するための空間分割構造として機能します。データセットをデータ構造内のサブセットに分割することで、すべてのトレーニング データ ポイントの距離計算の必要性を最小限に抑えることができます。

スペースを分割する方法の 1 つはバケット化と呼ばれます。これには、同じサイズのバケットや特徴の測定によって定義された境界など、特定の基準に基づいてデータセットをサブセットまたはバケットに分割することが含まれます。そうすることで、トレーニング セット全体の検索を回避し、クエリ ポイントの近傍を検索するときに特定のバケット内の関連ポイントのみに焦点を当てることができます。この最適化により、検索プロセスの効率が大幅に向上します。

もう 1 つの空間分割手法は KD ツリーです。これはハイパーキューブを構築してデータセットを分割します。この方法はバケット化とは異なりますが、距離計算の数を減らして検索効率を向上させるという目的は共通しています。 KD ツリーは、多数の特徴を含むデータセットに特に適しています。

同様に、ボール ツリー アルゴリズムは空間分割として超球を作成します。 KD ツリーとボール ツリーのどちらを選択するかは、データセットの特性によって異なります。高次元のデータセットの場合、多くの場合、ボール ツリー アルゴリズムが好まれます。広く使用されているツールである scikit-learn 機械学習ライブラリは、K 最近傍分類器のアルゴリズムにさまざまなオプションを提供し、データセットに基づいて最も効率的な空間分割アルゴリズムを自動的に選択することは注目に値します。ただし、必要に応じてこの設定を手動でオーバーライドできます。

さらに、次元削減技術を採用することで、K 最近傍法のパフォーマンスを向上させることができます。次元削減には、特徴抽出と特徴選択という 2 つの種類があります。特徴抽出には、既存の特徴を変換または組み合わせて、データの低次元表現を作成することが含まれます。一方、機能の選択には、新しい機能を作成せずに、使用可能な機能のサブセットを選択することが含まれます。特徴の数を減らすことで、距離計算の計算コストを削減し、アルゴリズムの効率を向上させる可能性があります。さらに、高次元データセットは次元の呪いに悩まされることが多く、過学習による汎化パフォーマンスの低下につながる可能性があります。したがって、次元削減もこの問題の軽減に役立ちます。

K 最近傍法の計算パフォーマンスを最適化するには、編集または枝刈りの手法を検討します。枝刈りには、決定境界に影響を与えることなく、トレーニング セットから不要なデータ ポイントを削除することが含まれます。冗長な点を排除することで、比較と距離の計算の数を減らすことができ、アルゴリズムをより効率的にすることができます。同様に、プロトタイプの作成には、トレーニング データ ポイントの密集領域を単一の代表ポイントで置き換えることが含まれます。この戦略により、アルゴリズムの予測精度を維持しながら、ストレージ容量の要件が削減されます。

さらに、ハイパーパラメータ調整は、K 最近傍アルゴリズムの予測パフォーマンスを向上させる上で重要な役割を果たします。ハイパーパラメータは、アルゴリズムの動作に影響を与える調整可能な設定ですが、トレーニング データからは学習されません。これらには、K の値 (考慮する近傍の数)、フィーチャのスケーリング、使用される距離の測定値、および距離計算の重み付けスキームが含まれます。これらのハイパーパラメータに適切な値を選択すると、アルゴリズムのパフォーマンスに大きな影響を与える可能性があります。ただし、慎重にモデルをトレーニング データに過剰適合させないように注意することが重要です。

空間分割データ構造を活用し、次元削減手法を採用し、編集および枝刈り手法を適用し、ハイパーパラメータを微調整することにより、K 最近傍アルゴリズムの計算パフォーマンスと予測パフォーマンスの両方を強化できます。

2.5 Improving k-nearest neighbors (L02: Nearest Neighbor Methods)
2.5 Improving k-nearest neighbors (L02: Nearest Neighbor Methods)
  • 2020.09.08
  • www.youtube.com
This video summarizes some of the common tricks for making k-nearest neighbors more efficient in terms of computational performance and predictive performanc...
 

2.6 Python の K 最近傍法 (L02: 最近傍法)



2.6 Python の K 最近傍法 (L02: 最近傍法)

K 最近傍関数について包括的に説明した後、本文では、人気のある scikit-learn ライブラリを使用した K 最近傍関数の実装を紹介する Python の例を紹介します。著者は、すべての側面がすぐに明確になるわけではないことを認め、今後の講義では Python、NumPy、scikit-learn についてさらに深く掘り下げることを読者に保証します。それにもかかわらず、提供された例は、これらのツールがどのように動作するかについてトップダウンの視点を提供するティーザーとして機能します。

実装例をサポートするために、著者は、読者がコード例を見つけることができる Web サイトを参照しています。さらに、著者は、zip ファイルまたはクローン作成を使用して GitHub からリポジトリをダウンロードするプロセスについても説明します。著者は、現実世界のツールとしての GitHub の重要性を強調し、GitHub プロフィールを持ち、プロジェクトを共有することが、潜在的な雇用主に自分の仕事を紹介する際に有利になる可能性があると示唆しています。

このテキストでは、GitHub リンクと「git clone」コマンドを使用してリポジトリのクローンを作成する方法について詳しく説明します。 Windows ユーザーの場合はプロセスが若干異なる可能性があることを承知していますが、著者はチュートリアルや TA (ティーチング アシスタント) の支援を求めることをお勧めします。リポジトリのクローンが正常に作成されると、作成者は読者にそのフォルダーに移動するように指示し、「git pull」コマンドを使用して更新を取得できることを説明します。

コード例に移り、著者は Jupyter Notebook (具体的には Jupyter Lab) を開いて、コマンドを段階的に実行する方法を示します。読者を圧倒しないように、著者は各実行後に出力をクリアすることの重要性を強調しています。さらに、著者は、使用されているソフトウェア パッケージのバージョンを表示する Jupyter Notebook のウォーターマーク拡張機能の有用性についても言及しています。この情報はトラブルシューティングに役立ち、結果の再現性を保証します。実装を容易にするために、Pandas、NumPy、Matplotlib、scikit-learn などの必須パッケージがインストールされます。

次に、作成者は CSV ファイルから Iris データセットをロードし、「head」や「tail」などのコマンドを使用してデータセットをプレビューする方法を紹介します。データは、「read_csv」関数を使用して Pandas DataFrame にロードされます。著者は、機械学習では通常 NumPy 配列が使用されることに注意しながら、scikit-learn が DataFrame もサポートしていることを強調しています。これを説明するために、著者は DataFrame から特定の列を抽出して NumPy 配列を作成する例を示しています。トレーニング例と特徴の数を示す配列の形状は、「shape」コマンドを使用して表示されます。

このテキストでは、Python と scikit-learn ライブラリを使用した機械学習ワークフローを構成する一連の手順の概要を説明します。これらの手順の詳細な概要は次のとおりです。

  1. インデックスとラベルのシャッフル: 作成者は、データセット内のインデックスとラベルをシャッフルするプロセスについて説明することでワークフローを開始します。シャッフルの目的は、データ ポイントの順序をランダム化し、各ラベルが特徴行列の正しい行に対応するようにすることです。

  2. データセット部門: データセットはトレーニング セットとテスト セットに分割されます。作成者は、トレーニング セット用に最初の 105 個の例を手動で選択し、残りの 45 個の例をテスト セット用に予約します。この分割は、機械学習モデルのパフォーマンスを評価するために重要です。

  3. scikit-learn と Iris データセットの紹介: 著者は、scikit-learn ライブラリ、特に Iris データセットと「train_test_split」関数の実装を紹介します。 Iris データセットは、分類タスクに広く使用されている人気のあるデータセットです。 「train_test_split」関数は、データセットを自動的にシャッフルし、トレーニングとテストのために指定された比率に分割します。

  4. 散布図行列を使用した視覚化: 著者は、データセットを視覚化するために「散布図行列」と呼ばれる便利な機能を提供しています。この関数は、matplotlib ライブラリを利用して、対角線上に表示されるヒストグラムを持つ散布図行列を作成します。散布図マトリックスは、データセット内のさまざまなフィーチャ間の関係を視覚的に表します。

  5. 散布図行列のデモンストレーション: 著者は、Iris データセットをプロットすることによって、散布図行列の使用法をデモンストレーションします。さまざまなクラスの花を表すためにさまざまな色が割り当てられています。特に、著者は、花びらの長さや幅などの特定の特徴が、異なる花のクラスを区別するのに特に役立つことを強調しています。

  6. k 近傍 (k-NN) 分類器の紹介: 著者は、k 近傍 (k-NN) 分類器について説明します。これは、隣接するデータ ポイントへの近さに基づいてデータ ポイントを分類する単純なアルゴリズムです。 k-NN 分類器をインスタンス化するために、作成者は 3 つの近傍を持つオブジェクトを作成します。

  7. k-NN 分類器のフィッティング: k-NN 分類器は、「fit」メソッドを使用してトレーニング セットにフィッティングされます。このステップでは、提供されたトレーニング データを使用してモデルをトレーニングします。

  8. テスト セットの予測: 著者は、適合 k-NN 分類器を使用して、「predict」メソッドを使用してテスト セットの予測を行います。予測は「pred」という変数に保存されます。

  9. パフォーマンス評価: モデルのパフォーマンスを評価するために、作成者は予測されたラベル (「pred」に保存されている) をテスト セットの真のラベル (「y_test」に保存されている) と比較します。正しい予測の数を計算することで、テスト セット上のモデルの精度を判断できます。

  10. 結論とさらなる探求: この講義は、k 最近傍アルゴリズムとそのさまざまなオプションに関する追加情報について scikit-learn ドキュメントを調べるよう読者に勧めて終わります。さらに、著者は k-NN 分類器で使用されるデフォルトの距離メトリックに関して読者に質問を投げかけ、この側面を調査して議論するための演習を提案します。

この講義では、K 最近傍の概念、scikit-learn ライブラリを使用した実装例、GitHub からのリポジトリのダウンロードとクローン作成のガイドライン、Jupyter Notebook と Jupyter Lab の紹介、データセットのロードなど、さまざまなトピックについて包括的に説明します。 Pandas DataFrame に変換し、列の抽出と NumPy 配列への変換を示します。

2.6 K-nearest neighbors in Python (L02: Nearest Neighbor Methods)
2.6 K-nearest neighbors in Python (L02: Nearest Neighbor Methods)
  • 2020.09.10
  • www.youtube.com
In this video, we are talking about using k-nearest neighbors in Python using scikit-learn. Jupyter Notebook: https://github.com/rasbt/stat451-machine-learni...
 

3.1 (オプション) Python の概要



3.1 (オプション) Python の概要

皆さんが素晴らしい一週間を過ごし、講義を楽しんでいることを願っています。今日は、最近の講義で取り上げられたいくつかの重要なトピックについてお話したいと思います。

最初にCanaanの改善についての講義があり、続いてPythonでpsychic learnを使ったkinの実装について講義を行いました。イントロからあなたのことを知るためのクイズまでのフィードバックを基に、あなたのほとんどがプログラミングの背景があるか、以前にプログラミングのクラスを受講したことがあることがわかりました。このコースではあなたにとって非常に有益となるため、これは素晴らしいニュースです。しかし、Python の確かな経験があるのは約半数だけであることに気付きました。したがって、Python を使用した科学技術コンピューティングに取り組み、精神学習をさらに詳しく調査する前に、Python を初めて使用する人向けに Python のセットアップに関する支援を提供することが役立つと考えました。これにより、次回の講義が全員にとってよりスムーズに進むようになります。

軽い話ですが、あなたの好きな趣味について読むのは本当に楽しかったです。クロスカントリースキー、ランニング、ハイキングなどのアウトドアアクティビティに対する私と同じ愛を持っている人も多いようです。自然の中で過ごす時間は本当にリフレッシュできますが、雨の日や長い冬がその機会を制限してしまうことは理解しています。ビデオゲームへの興味について言及した学生もおり、ゼルダシリーズについて言及した学生もいました。私もこのシリーズの大ファンであることを認めなければなりませんが、雪の降るクリスマスの日や、忙しい一日の後にくつろぐためにこのシリーズを楽しんでいます。

さて、約束どおり、今日の講義は任意です。すでに Python の経験が豊富で、コンピューターに Python がセットアップされている場合は、次の 3 つのビデオをスキップしても問題ありません。ただし、Python を初めて使用する場合、または設定に支援が必要な場合は、これらを視聴することをお勧めします。これらのビデオは、私自身の Python の経験に基づいたモチベーションと実践的なアドバイスを提供します。このコースで Python を使用するのに専門プログラマーである必要はないことに注意してください。機械学習に必要な基本に焦点を当て、学習が進むにつれてさらに学習していきます。

来週は、最初の実際の宿題があり、K 最近傍アルゴリズムを実装します。この課題では、心霊学習の使用に加えて、独自のコードを記述する必要があります。したがって、宿題に備えて今週 Python をセットアップすると有益です。心配しないで;この課題は、KNN アルゴリズムをより深く理解できるように設計されており、最初の宿題なのでそれほど難しくはありません。この課題を完了したら、概念的な機械学習の側面をさらに深く掘り下げていきます。

次に進む前に、コースの進行状況を簡単に概観しましょう。最初の週では、機械学習と K 最近傍の概要について説明しました。現在は 2 週目に入っており、計算基礎に重点を置いています。これらの基礎は、後でさまざまな機械学習の概念を実装するために使用するため、非常に重要です。したがって、早い段階で Python とその使用法に慣れることが重要です。この講義では主に Python とその設定方法について説明します。私は Mac でセットアップ プロセスをデモンストレーションしますが、Windows 関連の質問には弊社の TA が対応できることに注意してください。

Python はインタープリタ型の動的プログラミング言語であるため、C や C++ などの静的に型付けされた言語と比較して、よりインタラクティブでユーザーフレンドリーです。 Python はこれらの言語より遅いかもしれませんが、私たちの目的にとっては大きな問題ではありません。次の講義で説明する科学計算ライブラリの多くは C または Fortran で書かれており、高速な実行時間を実現します。 Python は、Django などの Web フレームワークや Instagram や Dropbox などの人気サービスを含む、さまざまなアプリケーションで広く使用されている汎用プログラミング言語です。

ここで、簡単なプログラムを書いて、Python と C などの静的型付け言語を比較してみましょう。 C では、変数を宣言し、整数、浮動小数点数、文字などのデータ型を明示的に指定する必要があります。 C での簡単なプログラムの例を次に示します。

#include <stdio.h>

int main() {
     int age = 25 ;
     float height = 1.75 ;
     char initial = 'J' ;

    printf( "My age is %d\n" , age);
    printf( "My height is %.2f meters\n" , height);
    printf( "My initial is %c\n" , initial);

     return 0 ;
}
この C プログラムでは、変数 age、height、initial をそれぞれのデータ型で宣言しました。次に、これらの変数に値を割り当て、printf() を使用して出力しました。

次に、Python で同じプログラムを比較してみましょう。

age = 25
height = 1.75
initial = 'J'

print( "My age is" , age)
print( "My height is" , height, "meters" )
print( "My initial is" , initial)
Python では、変数の型を明示的に宣言する必要はありません。値を変数に直接割り当てることができ、Python が自動的にデータ型を推測します。 print() 関数は出力を表示するために使用されます。

Python はそのシンプルさと読みやすさにより、初心者にも経験豊富なプログラマにも同様に優れた選択肢となります。科学計算、データ分析、機械学習などに適したライブラリとフレームワークの広大なエコシステムを備えています。

それでは、コンピューター上での Python のセットアップに進みましょう。 Python をインストールするにはさまざまな方法がありますが、科学計算に役立つ多くのライブラリがあらかじめパッケージ化されている Anaconda ディストリビューションを使用することをお勧めします。 Anaconda をインストールする手順は次のとおりです。

  1. Anaconda Web サイト ( https://www.anaconda.com/products/individual ) にアクセスし、オペレーティング システム (Windows、macOS、または Linux) に適したインストーラーをダウンロードします。

  2. インストーラーを実行し、画面上の指示に従います。特別な設定がない限り、デフォルトのインストール オプションを選択できます。

  3. インストールが完了すると、Anaconda Navigator と Anaconda Prompt (または Anaconda PowerShell Prompt) がコンピューターにインストールされているはずです。これらは、Python 環境とパッケージを管理するための便利なツールです。

  4. Anaconda Navigator を開き、「環境」タブをクリックします。ここで、このコース用の新しい環境を作成できます。 [作成] ボタンをクリックし、環境の名前 (例: 「machine-learning」) を指定し、Python のバージョン (できれば Python 3.x) を選択します。 「作成」をクリックして環境を作成します。

  5. 環境が作成されたら、Anaconda Navigator の [ホーム] タブをクリックします。利用可能なアプリケーションと環境のリストが表示されます。ウィンドウの上部にあるドロップダウン メニューから、新しく作成した環境を選択します。

  6. 「ホーム」タブで、Jupyter Notebook セクションの下にある「インストール」ボタンをクリックします。これにより、対話型プログラミングと Python コードの実行に使用する Jupyter Notebook がインストールされます。

  7. インストール後、Jupyter Notebook の横にある「起動」ボタンをクリックします。これにより、Web ブラウザーで新しいタブが開き、Jupyter Notebook が実行されます。

おめでとう! Anaconda ディストリビューションを使用して、Python と Jupyter Notebook が正常にインストールされました。これで、このコースの Python でのコーディングを開始する準備が整いました。次の講義では、Python を使用した科学技術コンピューティングをさらに深く掘り下げ、scikit-learn と呼ばれる人気のあるライブラリを探索します。

インストール プロセス中に問題が発生した場合、またはご質問がある場合は、ディスカッション フォーラムで遠慮なく質問するか、TA に連絡してサポートを求めてください。

これらの手順は Anaconda に固有のものであることに注意してください。ただし、Miniconda や標準の Python ディストリビューションなど、別の Python ディストリビューションを使用したい場合でも、コースに従うことができます。

3.1 (Optional) Python overview
3.1 (Optional) Python overview
  • 2020.09.16
  • www.youtube.com
In this optional videos, I mainly talk about the use of Python in this course. I will also show a quick demo using C (a statically typed language) vs Python....
 

3.2 (オプション) Python のセットアップ


3.2 (オプション) Python のセットアップ

コースの 2 番目のビデオでは、セットアップ プロセスと Python のインストール方法について説明します。前回のビデオでは、動的インタープリター言語としての Python に焦点を当てながら、インタープリター言語と動的プログラミング言語の基本について説明しました。

インストールを続行する前に、ビデオを視聴し、視聴中にコンピューターに何かをインストールしないことが重要です。この予防措置により、決定を下す前にさまざまなインストール オプションを完全に理解することができます。適切な知識を持たずにソフトウェアをインストールすると、後で後悔する可能性があります。

まず、コンピュータに最新の Python バージョンがインストールされているかどうかを確認することをお勧めします。 Mac または Linux では、「this Python」コマンドを使用して、インストール場所とバージョンを確認できます。同様に、Windows では、「where」コマンドを使用してインストール場所を見つけることができます。

多くの Mac には従来、古いバージョンの Python、特に Python 2 が搭載されています。Python 2 は Python コミュニティでサポートされなくなったため、Python を更新することを強くお勧めします。新しい 3.9 バージョンはまだ開発中であるため、理想的には Python 3.8 または 3.7 をインストールすることをお勧めします。

Python をインストールする正式な方法は、python.org にアクセスしてインストーラーをダウンロードすることです。ただし、多くの場合好まれる代替アプローチは、Anaconda、より具体的には Miniconda を使用することです。 Miniconda は、不要なライブラリを含まない Anaconda の軽量バージョンであり、コンピュータ上のストレージ領域を節約します。 Anaconda にはプリインストールされたライブラリが付属していますが、Miniconda ではよりカスタマイズされたインストール プロセスが可能です。

個人的に、インストラクターは Miniconda の使用を推奨しています。その理由は、その利便性と、Python 科学技術コンピューティング コミュニティの多くのメンバーが Miniconda を使用して肯定的な経験をしているからです。 Miniconda は、必要なパッケージ バージョンがすべてインストールされていることを確認し、パッケージの依存関係を管理する包括的なパッケージ マネージャーを提供します。この機能により、安定した互換性のある開発環境を維持することが容易になります。

Miniconda をインストールするには、ドキュメント Web サイト docs.conda.io にアクセスし、最新の英語版の Miniconda インストール ページに移動します。そこから、オペレーティング システムに適切なインストーラーを選択できます。 Mac ユーザーの場合、bash インストーラーが一般的に使用されます。インストーラーをダウンロードした後、スクリプトを実行し、使用許諾契約に同意し、インストール場所を選択します。

Miniconda がインストールされたら、Python シェルを開いてデフォルトの Python バージョンを確認できます。更新されたバージョンが表示されるはずです。 Miniconda は、さまざまな環境を管理するためのツールも提供しており、さまざまなプロジェクト用に分離された環境を作成できます。このコースには必要ありませんが、これらの環境は複数のプロジェクトに同時に取り組む場合に役立ちます。

次の講義に必要な「numpy」パッケージなどのパッケージをインストールするには、パッケージ マネージャー「pip」または Conda インストーラーを使用できます。 Miniconda を使用しているため、互換性とバージョン管理が向上するため、可能な限り Conda インストーラーを使用することをお勧めします。ただし、パッケージが Conda で利用できない場合は、「pip」を使用することができます。

「mlxtend」パッケージなど、Conda で利用できないパッケージをインストールする必要がある場合は、Conda Forge を探索できます。 Conda Forge は、広範な Conda コミュニティによってサポートされるライブラリをホストするコミュニティ主導のリポジトリです。 Conda Forge で目的のパッケージを検索すると、そのパッケージに固有のインストール手順が見つかります。

Conda パッケージ マネージャーを使用して、「conda update」の後にパッケージ名を指定するなどのコマンドを使用するか、「pip install --upgrade」の後にパッケージ名を指定して「pip」を使用してパッケージを更新することもできることに注意してください。

これらのインストールとパッケージ管理のガイドラインに従うことで、このコースでの Python のセットアップをスムーズかつ効率的に行うことができます。

Conda Forge チャネルからパッケージをインストールするには、次のコマンドを使用できます。

conda install -c conda-forge <パッケージ名>

たとえば、Conda Forge から MLX エクステント パッケージをインストールするには、次を使用します。

conda install -c conda-forge mlx_ext

このコマンドは、Conda Forge チャネルでパッケージを検索し、環境にインストールします。

必要なパッケージが Conda Forge または他の Conda チャネルで利用できない場合は、pip パッケージ マネージャーを使用してインストールすることもできます。 Pip は Python のデフォルトのパッケージ マネージャーであり、Python Package Index (PyPI) からパッケージをインストールできます。

pip を使用してパッケージをインストールするには、次のコマンドを使用できます。

pip install <パッケージ名>

たとえば、pip を使用して「example-package」というパッケージをインストールするには、次のように使用します。

pip インストール例パッケージ

<package-name> を、インストールするパッケージの実際の名前に置き換えてください。

Conda と pip の両方を使用する場合は、パッケージの互換性を維持し、依存関係を管理するために、Conda をプライマリ パッケージ マネージャーとして使用することが一般的に推奨されることに注意してください。ただし、パッケージが Conda で利用できない場合は、pip の使用が適切な代替手段となります。

これで、Python をインストールし、Conda と pip を使用してパッケージを管理するためのセットアップ手順は終わりです。コンピュータに何かをインストールする前に必ずビデオ チュートリアルを視聴し、推奨手順に従ってスムーズなインストール プロセスを確保してください。

3.2 (Optional) Python setup
3.2 (Optional) Python setup
  • 2020.09.16
  • www.youtube.com
In this optional video, I am demonstrating how to install Python using Miniconda on macOS. Also, I provide some brief demo of the conda package manager.-----...
 

3.3 (オプション) Python コードの実行


3.3 (オプション) Python コードの実行

講義 3 の 3 番目と最後のビデオでは、Python コードを実行するためのさまざまな方法を示します。このビデオでは、Jupiter ノートブックに焦点を当てます。Jupiter ノートブックは、単一の文書内で便利なコーディング、テキストの作成、数式のレンダリング、プロットを可能にするファイル形式およびプログラムであり、今後の宿題で使用されます。

Jupiter ノートブックに入る前に、まず Python コードを実行する最も簡単な方法を説明します。これは、Python インタープリター、または REPL (Read-Eval-Print Loop) と呼ばれるものを使用します。インタプリタを使用すると、Python コードを対話的に実行できます。つまり、コードはすぐに評価されます。インタープリターを使用するには、ターミナルを開いて「python」と入力します。そこから、Python 式を入力して、結果をすぐに確認できます。たとえば、「print(1 + 2)」と入力すると、結果「3」が表示されます。値のループや出力など、より複雑なタスクにもインタープリターを使用できます。

インタプリタは素早い計算には役立ちますが、より複雑なコードを記述する場合にはお勧めできません。計算を見失ってしまいがちで、スクロールして前に実行したコマンドを見つけるのが面倒になることがあります。したがって、より複雑なコードの場合は、Python スクリプトまたは Jupiter ノートブックを使用することをお勧めします。

次に、IPython と呼ばれる代替の対話型 Python インタープリターを紹介します。 IPython は、構文の色付け、コードを簡単に変更できる履歴機能、マジック コマンドなど、通常のインタープリターと比較して追加の機能を提供します。マジック コマンドは、パーセント記号 (%) で始まり、便利な機能を提供する特別なコマンドです。そのような例の 1 つは、さまざまなコード実装のベンチマークを可能にする「timeit」マジック コマンドです。これを示すために、文字列を反転する 2 つの関数を実装し、「timeit」コマンドを使用して効率を比較します。

IPython の利点を紹介した後、Jupiter ノートブックはもともと IPython 上に構築されていたため、IPython ノートブックと呼ばれていたことを説明します。現在でも、Jupiter ノートブックは IPython に依存しており、同じ利点と追加機能を提供しています。 IPython をインストールするには、Conda を使用し、詳細なドキュメントについては IPython Web サイトを表示します。

次に、Python コードを実行する 2 番目の方法である Python スクリプトを使用する方法について説明します。この方法では、拡張子 .py を持つファイルを作成し、そのファイルにコードを書き込み、コマンド ラインから実行します。ループを使用して 0 から 4 までの数字を出力する Python スクリプトの例を示します。

最後に、きれいで読みやすいコードを書くために、PEP 8 などのコーディング スタイル ガイドラインに従うことの重要性について触れます。 Visual Studio Code のような統合開発環境で Flake8 などのリンターを使用すると、スタイルの問題を特定して修正し、コード全体の品質を向上させる方法を示します。

このビデオでは、インタープリターの使用、Python スクリプトの作成、IPython と Jupiter ノートブックの利点の活用など、Python コードを実行するさまざまな方法について説明しました。各方法には独自の利点があり、さまざまな目的に適しています。

3.3 (Optional) Running Python code
3.3 (Optional) Running Python code
  • 2020.09.16
  • www.youtube.com
In this third and last video of the optional lecture 3, I am demonstrating the different ways for running Python code: the REPL, IPython, .py scripts, and Vi...
 

4.1 NumPy の概要 (L04: Python による科学計算)



4.1 NumPy の概要 (L04: Python による科学計算)

このチュートリアルでは、配列の作成、要素へのアクセス、配列操作の実行など、NumPy の基本について説明します。さぁ、始めよう!

まず、NumPy ライブラリをインポートする必要があります。従来は、別名 np でインポートされます。次のコードを実行して NumPy をインポートします。

import numpy as np
NumPy をインポートしたので、最初の配列を作成しましょう。 NumPy 配列は、Python リストを入力として受け取る np.array() 関数を使用して作成されます。次のコードを実行して配列を作成します。

arr = np.array([1, 2, 3, 4, 5])
print(arr)
次の出力が表示されるはずです。

[1 2 3 4 5]
おめでとう!最初の NumPy 配列が作成されました。次に、配列に対して実行できるいくつかの基本的な操作を見てみましょう。

配列要素へのアクセス

NumPy 配列内の要素にアクセスするには、Python リストと同様に、インデックス付けとスライスを使用できます。インデックスは 0 から始まります。

次のコードを実行して、配列内の要素にアクセスします。

 print (arr[ 0 ])   # Access the first element
print (arr[ 2 ])   # Access the third element
print (arr[- 1 ])   # Access the last element
出力は次のようになります。

1
3
5
スライスを使用して、配列内の要素の範囲にアクセスすることもできます。スライスの構文は start:stop:step です。start は開始インデックス、stop は停止インデックス (排他的)、step はステップ サイズです。

次のコードを実行して配列をスライスします。

 print (arr[ 1 : 4 ])   # Access elements from index 1 to 3
print (arr[:: 2 ])   # Access every other element

出力は次のようになります。

[2 3 4]
[1 3 5]
配列演算

NumPy 配列は、加算、減算、乗算、除算などのさまざまな数学演算をサポートします。これらの操作は要素ごとに配列に適用されます。

次のコードを実行して配列操作を実行します。

arr1 = np. array ([ 1 , 2 , 3 ])
arr2 = np. array ([ 4 , 5 , 6 ])

# Addition
print (arr1 + arr2)

# Subtraction
print (arr1 - arr2)

# Multiplication
print (arr1 * arr2)

# Division
print (arr1 / arr2)
出力は次のようになります。

 [5 7 9]
[-3 -3 -3]
[4 10 18]
[0.25 0.4  0.5]
NumPy は、配列に適用できるさまざまな数学関数も提供します。たとえば、np.sin() 関数を使用して配列の正弦を計算できます。

次のコードを実行して、数学関数を配列に適用します。

arr = np. array ([ 0 , np.pi/ 2 , np.pi])

# Calculate sine
print (np.sin(arr))
出力は次のようになります。

[0.0000000e+00 1.0000000e+00 1.2246468e-16]

配列の形状と再形成

NumPy 配列の形状は、行数や列数などの次元を表します。配列の形状を確認するには、shape 属性を使用します。

次のコードを実行して、配列の形状を確認します。

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)
出力は次のようになります。

(2, 3)
reshape() 関数を使用して配列の形状を変更することもできます。この関数を使用すると、データを変更せずに配列のサイズを変更できます。

次のコードを実行して配列を再形成します。

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape((2, 3))
print(reshaped_arr)
出力は次のようになります。

[[1 2 3]
 [4 5 6]]
これらは、NumPy で実行できる基本操作の一部にすぎません。このライブラリは、配列を効率的に操作するための幅広い関数と機能を提供します。 NumPy の機能について詳しくは、NumPy のドキュメントを参照することをお勧めします。
4.1 Intro to NumPy (L04: Scientific Computing in Python)
4.1 Intro to NumPy (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
This first video in the "L04: Intro to Scientific Computing in Python" introduces NumPy on a basic level before diving into more details in the following vid...
 

4.2 NumPy 配列の構築とインデックス作成 (L04: Python による科学計算)



4.2 NumPy 配列の構築とインデックス作成 (L04: Python による科学計算)

2 番目のビデオでは、Python 以外の配列の構築とインデックス付けについて説明したいと思います。配列構築ルーチンは、配列を作成するための便利な構成要素または関数です。これらは、後で特定の値を入力できるプレースホルダー配列が必要な場合に便利です。私が何を言いたいのかを説明しましょう。

数字の 1 が入った配列を作成するには、ones 関数を使用します。たとえば、ones((3, 3)) は、すべての要素が 1 に設定された 3x3 配列を生成します。さまざまな次元 (ones((3, 4)) など) を指定することもできます。これにより、1 で埋められた 3x4 行列が作成されます。 ones 関数は、配列のデータ型を決定する dtype パラメータを含むさまざまな引数を受け入れます (64 ビット マシンのデフォルトは float64)。これを int64 に設定すると、整数の配列を作成できます。さらに、メモリ内での配列のレイアウト方法を制御する order パラメーターを指定できます。デフォルトは行優先スタイルを表す C ですが、Fortran スタイルのレイアウトの場合は F を選択できます。ただし、このクラスの場合、これらの詳細は NumPy と C または Fortran コードを組み合わせることに関連しているため、心配する必要はありません。

同様に、zeros 関数を使用して、ゼロで埋められた配列を作成できます。物と同じように使えます。これらの関数について詳しく知りたい場合は、ヘルプ関数を使用するか、Jupyter Lab または IPython で疑問符 (?) を使用できることを覚えておいてください。

値を初期化せずに空の配列を作成する empty 関数もあります。ほとんどの場合、この関数は任意の値を含む配列を作成するだけなので、この関数の詳細を気にする必要はありません。恒等関数は、対角要素が 1 で残りが 0 である恒等行列を作成します。これを使用して、特定の値を含む対角行列を作成できます。

インデックス付けの話に移りますが、NumPy 配列での基本的なインデックス付けは、Python リストでのインデックス付けと似ています。角括弧を使用して要素にアクセスできます。たとえば、array[0] は最初の要素を返し、array[1] は 2 番目の要素を返します。 Python リストと同様に、スライスも可能です。たとえば、array[1:4] はインデックス 1 から 3 までの配列のスライスを返します (インデックス 4 は除く)。

2 次元配列を扱う場合、カンマ表記を使用して 2 次元のインデックスを付けることができます。最初のインデックスは行を指定し、2 番目のインデックスは列を指定します。たとえば、array[0, 0] は 1 行目と 1 列目の要素を返し、array[1, 2] は 2 行目と 3 列目の要素を返します。

負のインデックスを使用すると、配列の末尾から要素にアクセスできます。たとえば、array[-1, -1] は配列の最後の要素を返します。同様に、array[-1, -2] は最後から 2 番目の要素を返します。これは、配列の長さを追跡する必要がないため、大きな配列を操作する場合に役立ちます。

行全体または列全体を取得するには、インデックスの 1 つを省略できます。たとえば、array[0, :] は最初の行全体を返し、array[:, 1] は 2 番目の列全体を返します。これは、インデックスの範囲を指定することと同じです (たとえば、最初の行には array[0, 0:3])。スライスは両方の次元で機能するため、配列の特定の部分を選択できます。たとえば、array[1:3, 2:4] は、行 1 と 2 (行 3 を除く) と列 2 と 3 (列 4 を除く) で構成される部分配列を返します。

ブールインデックス作成は、NumPy のもう 1 つの強力な機能です。ブール配列を使用して配列にインデックスを付け、ブール配列内の True 値に対応する要素のみを選択できます。たとえば、(3, 3) の形状を持つ array という配列があるとします。

array( [[1, 2, 3] ,
       [4, 5, 6] ,
       [7, 8, 9] ])

配列 > 5 などの条件に基づいてブール配列を作成できます。これにより、次のブール配列が返されます。

array([[ False , False , False ],
       [ False , False , True ],
       [ True , True , True ]])
このブール配列を元の配列のインデックスとして使用すると、True 値に対応する要素のみを選択でき、結果は次のようになります。

array([6, 7, 8, 9])
ブールインデックスにより、特定の条件に基づいて要素を柔軟かつ効率的に選択できます。

基本的なインデックス付けに加えて、NumPy は、整数配列のインデックス付けや配列のインデックスとしての使用など、高度なインデックス付け手法を提供します。これらの手法により、配列に対するより複雑で不連続なインデックス付け操作が可能になります。ただし、これらはより高度なトピックであり、基本的な配列操作には必要ない場合があります。

4.2 NumPy Array Construction and Indexing (L04: Scientific Computing in Python)
4.2 NumPy Array Construction and Indexing (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
This video explains how we can construct arrays in NumPy and how we access individual elements via indexing operations.Link to the Jupyter notebook: https://...
 

4.3 NumPy 配列の数学とユニバーサル関数 (L04: Python による科学計算)



4.3 NumPy 配列の数学とユニバーサル関数 (L04: Python による科学計算)

レースの作成と配列内の個々の値のインデックス付けにかなりの時間を費やした後、より興味深いトピックである非ペイ配列、数学、およびユニバーサル関数に移りましょう。

ユニバーサル関数は、Ufunk または Frank と略されることが多く、プログラミングにおける強力な概念です。ユニバーサル関数 (Ufunk) はユニバーサル関数の短縮形であり、Numpy 配列をより効率的かつ便利に操作できるようになります。ベクトル化と呼ばれる概念が導入されています。

ベクトル化には、配列などのオブジェクトのシーケンスに対して数学的または算術演算を実行することが含まれます。配列の各要素に対して操作を個別に実行する代わりに、ベクトル化により、要素間に依存関係がないことを利用して、操作を並行して実行できます。

たとえば、配列内のすべての要素に数値を追加するタスクを考えてみましょう。 Python for ループを使用すると、各要素を反復処理して加算関数を呼び出します。ただし、ベクトル化を使用すると、ループを必要とせずに、配列全体の加算を同時に実行できます。これにより効率が大幅に向上します。

Numpy では、ユニバーサル関数 (Ufunk) を使用してベクトル化が実現されます。 Numpy には 60 以上の Ufunk が実装されており、それぞれが特定の目的を果たします。利用可能な Ufunk の完全なリストについては、公式ドキュメントを参照することをお勧めします。

概念を説明するために、一般的な演算である要素ごとの加算に焦点を当ててみましょう。 Python でリストのリストとして実装された 2 次元配列があるとします。各要素に 1 を追加したい場合は、通常、ネストされたループまたはリスト内包表記を使用します。ただし、これらのアプローチは、特に大規模なアレイの場合、非効率的になる可能性があります。

Numpy では、Ufunk の「np.add」を使用して、ベクトル化された方法で配列全体に数値 1 を追加できます。これにより、明示的なループの必要性がなくなり、パフォーマンスが大幅に向上します。

Numpy は演算子のオーバーロードを活用しており、これにより Ufunk を直感的に使用できることは注目に値します。たとえば、配列と数値の間に「+」演算子を使用すると、「np.add」Ufunk が自動的に呼び出されます。

もう 1 つの便利な Ufunk は、配列内の各要素を 2 乗する「np.square」です。 Ufunk 関数は、単項 (単一の値で動作) またはバイナリ (2 つの引数を取る) にすることができます。 Numpy の公式ドキュメントには、利用可能な Ufunk の詳細が記載されています。

より興味深いケースに移り、「reduce」メソッドと組み合わせた Ufunk の使用を検討してみましょう。 「reduce」操作は、指定された軸に沿った操作を適用し、複数の値を 1 つの値に減らします。たとえば、「np.add」と「reduce」メソッドを使用して列の合計を計算できます。

このシナリオでは、指定された軸 (この場合は軸 0) をロールオーバーし、指定された操作を使用して要素を結合します。 「リデュース」操作は一般に、「マップ リデュース」や Hadoop などの概念に関連付けられており、計算が複数のノードに分散され、結合されて最終結果が生成されます。

これは圧倒されるように思えるかもしれませんが、これらの概念を理解することで、Numpy を使用したより効率的かつ効果的なプログラミングが可能になります。 Ufunk とベクトル化を活用することで、配列に対する複雑な操作を簡単に実行し、コードを最適化してパフォーマンスを向上させることができます。

利用可能な Ufunk の包括的なリスト、例および使用ガイドラインについては、必ず Numpy の公式ドキュメントを参照してください。 Ufunk の可能性を探ることでツールキットが拡張され、将来のプロジェクトでさまざまな計算タスクに取り組むのに役立ちます。

したがって、NumPy には、配列の指定された軸に沿ってリダクション操作を実行できる、reduce と呼ばれる関数があります。リダクション操作では、複数の値を 1 つの値に結合します。デフォルトでは、縮小は配列の最初の軸 (軸 0) に沿って適用されます。

この概念をよりよく理解するために例を見てみましょう。次の配列を考えてみましょう。

array( [[1, 2, 3] ,
       [4, 5, 6] ,
       [7, 8, 9] ])
列の合計を計算したい場合は、reduce 関数を使用できます。この操作では、最初の軸 (軸 0) をロールオーバーし、各列の値を結合します。したがって、結果は各列の合計を含む 1 次元配列になります。

これを実現するには、要素ごとの加算を実行する np.add 関数を使用できます。 np.add を関数の引数として reduce に渡し、指定された軸に沿って値を加算することを示します。

コードは次のようになります。

import numpy as np

array = np. array ([[ 1 , 2 , 3 ],
                  [ 4 , 5 , 6 ],
                  [ 7 , 8 , 9 ]])

column_sums = np.reduce(np.add, array )
print (column_sums)
出力は次のようになります。

[12 15 18]
この例では、reduce 関数が配列の列を反復処理し、値を加算します。最初の列 (1 + 4 + 7)、2 番目の列 (2 + 5 + 8)、および 3 番目の列 (3 + 6 + 9) を、列の合計を表す 1 つの配列に結合します。

このアプローチは、列を手動で繰り返して値を 1 つずつ追加するよりも効率的です。 NumPy が提供するベクトル化された演算により、最適化された基礎となるアルゴリズムを利用して計算を並列実行できます。

実行する操作に応じて、reduce は np.add 以外のさまざまな関数と一緒に使用できることに注意してください。リダクションの概念は強力であり、さまざまなシナリオに適用できます。

4.3 NumPy Array Math and Universal Functions (L04: Scientific Computing in Python)
4.3 NumPy Array Math and Universal Functions (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
This video discusses one of the core aspects of NumPy: it's functions that allow us to work with NumPy arrays efficiently.Jupyter notebook: https://github.co...
 

4.4 NumPy ブロードキャスト (L04: Python による科学計算)



4.4 NumPy ブロードキャスト (L04: Python による科学計算)

NumPy は、「ブロードキャスト」として知られる魅力的な機能を提供します。これにより、暗黙的な次元が導入され、厳密な線形代数の範囲内では通常不可能な演算を実行できるようになります。このブロードキャストの概念により、配列を操作する際の柔軟性と利便性が向上します。

NumPy はブロードキャストを活用することで、配列をさまざまな形状に自動的に配置し、基本的に配列を拡張して一致させ、要素ごとの操作を実行できます。この暗黙的なディメンションの作成により、さまざまなサイズの配列に対して操作をシームレスに実行できるようになり、結果として簡潔で効率的なコードが得られます。

線形代数のコンテキストでは、数学的ルールの厳密な遵守が演算を制御するため、ブロードキャストは複雑な計算を簡素化する強力なツールとなります。これにより、形状が異なる配列に対して計算を実行できるため、要素を手動で再形成したりループしたりする必要がなくなります。

ブロードキャストのおかげで、暗黙的な次元を持つ配列に操作を簡単に適用でき、そうでなければ大規模な手動操作が必要な結果を達成できます。この機能により、NumPy で達成できる範囲が拡大し、科学計算やデータ分析に多用途で不可欠なライブラリになります。

4.4 NumPy Broadcasting (L04: Scientific Computing in Python)
4.4 NumPy Broadcasting (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
One of the cool things about NumPy is that it allows us to "broadcast." Here, that means that it is creating implicit dimensions that allow us to do things t...