先日は、
で、クラスやツリー構成について書きました。Pythonの学習を始めると、組み込み関数を最初に使って、その後、標準ライブラリを使ったコーディングを行う事になります。この標準ライブラリについては、Pythonの公式サイトに記載されていますが、ここで、詳細についても記載されています。現在は、3.9.9ですが、3.10もプレリリースされています。
■ Python 3.9.9 ドキュメント 【 Python 】
■ Python 3.10.0b2 ドキュメント 【 Python 】
3.10.0b2 Documentation (python.org)
この中に、ライブラリの一覧がありますが、
■ Python 標準ライブラリ 【 Python 】
https://docs.python.org/ja/3.9/library/
これを見ると、CSVやJSONが標準で変換可能になっているので、読み書きが出来るようになっており、XMLやHTMLにも対応し、CGIなども朝ポートしているようです。
そして、turtleもサポートしているので、LOGOのような使い方も可能となっています。ライブラリについては、マルチメディアもサポートしており、
■ ウィジェット : tkinter
■ 音声関連 : winsound/マルチメディア機能
で対応しているので、GUIはGTKが使用できます。GTKですが、Tcl/Tkで使用されているGUIのウィジェットになりますが、GTKのサイトを見てみると、最新版は4.41でベータ版は4.5になっているようです。
その為、GTK3は古いバージョンになっているようです。
■ GTK
GTKを使う場合、MINGWが必要になりますが、Gladeを
■ Glade
https://glade.gnome.org/index.html
をインストールするとWyswygでGUIを作る事ができます。
■ 外部ライブラリの確認と追加
Pythonではパッケージマネージャーを使う事でライブラリを追加できるようになっており、 【 pip 】 でライブラリを追加して機能を拡張する事ができます。この時に、
■ コマンドプロントプト
■ Powershell
などを使ってそこからコマンドを実行する事になります。ただし、現在何が入っているのかが解らないので、 【 pop list 】 と入力すると、
のように現在入っているライブラリの確認ができます。ライブラリの確認と追加にはコマンドプロンプトやPowerShellなどが必要になるので、Pythonをインストールして、IDLEでコーディングを行う場合だと、コマンドプロンプトやPowershellと一緒に使う事になります。
その為、tensorflowとかOpen-CVなどを使って画像解析とAIの処理を行う場合やゲーム用のライブラリのpygameを使う場合なども同様にそうした物をインストールする事になります。オンラインでJupiterを使った時のようにmatplotとかが最初から使える環境だとpipで追加しなくても作業が出来るのですが、通常は、公式サイトに書かれたもの以外は入っていませんから、必要性がある物を追加して作業を行う事になります。
■ PythonとJupiterで対応している物
外部ライブラリにはAI関連の物もありますが、それとは別に量子コンピューター関連の物も用意されています。
■ Open-Source Quantum Development
と言う物があります。プログラミング言語は電気の信号の二値での処理を行っている物になりますから、二値論理の概念がそのまま当てはまるので、論理と集合の概念でそのまま判定ができます。
その為、オンとオフの構造になりますから、二値になりますから、二進数の桁の集合になります。高級言語では数値は十進数で記述して扱いますから、この辺りは日常で見かける数値になります。
数値の構成は、十の累乗で構成されているので、この単位でどう言った数値の主剛体なのかを和得て考える事になります。そうすることで、桁単位の数値の集合に分ける事が出来ますが、この数値をこべつに桁と数値に置き換えて二進数に置き換える事が出来ます。
この時に二進数で数値を扱う状態がバイナリ化になりますが、通常のコンピューターだとXOR(排他的論理和)とAND(論理積)を組み合わせる事で、個別の入力の判定で1と0の判定を行い、両方が真の時に桁が繰り上がるので、ANDで桁のクリア針を使います。この繰り上がりを含めた状態で、この構造物を組み合わせて計算をすると、繰り上がりの値と入力値の判定を行って桁の計算が出来るようになります。この時の構造が全加算器になりますが、加算器では、この全加算器と煩瑣寒気の組み合わせで動く仕様になっています。
これに対して、量子回路はギターのタブ譜のように見慣れない形になっているので、結構特殊な仕様になっています。あと、量子回路を使う場合には、線形代数の知識が必要になるので、学習コストが高い物になっています。
■ Pythonの学習
Pythonのライブラリを見ると、コンソールアプリとでGTKを使ったウィンドウ内で機能するアプリケーション(デスクトップアプリ)を作ることが出来るようになりますが、BASICの時代と同じように
■ コーディングによるプログラムの記述
■ LOGOによる処理の学習
が行えるようになっています。この二者では少し違うのですが、Python入門のような本だと、 【 コードの書き方 】 なので、国語と同じように、 【 単語と意味 】 のように 【 関数 】 と 【 内容 】 を学びます。国語の場合、単語の使い方のように 【 文法 】 を学びますが、プログラミング言語にも文法があるので、国語と同じように、文章の構成のような物があります。
プログラミング言語を使う場合には、 【 実装関数を使った書式 】 を使う事になりますが、この時に
■ 処理の内容
■ 構文
を記述する事になります。この仕様を見ると、 【 言語の体系 】 になっているので、 【 プログラミング ” 言語 ” 】 と呼ばれていますが、Pythonも関数名は何をするのかが解るような名称になっていますから、人間の理解できる関数などが用意されています。
プログラミング言語の場合、
■ 機械よりの記述 : ローレベル、低水準言語
■ 人間よりの記述 : ハイレベル、高水準言語
と呼ばれています。これは、品質の話ではなく、ハードウェアのレイヤーの階層の話になりますが、この階層は機械からレイヤーが重なっており、アプリケーションのレイヤーの部分まで並んでいます。この階層が上に行く程処理が遅くなる代わりに、人間の解るようになっていきますが、元々、ハードウェアの処理は電気の信号なので、これは二進数の集合体になります。この時に0と1の集合体になっていますが、この
構造物の事を 【 バイナリ 】 と呼んでいます。
Pythonを使う時に、
■ ファイル形式
■ バイナリ形式
がありますが、このバイナリが機械の解る二進数の状態になります。
■ 機械の処理
コンピューターは、オルゴールや織り機のように二値のデータで処理を実装して行うような物を論理演算などを加えて複雑な処理をしている構造になっていますから、織り機やオルゴールには存在しない、 【 ラッチ 】 が存在しています。ラッチ回路は信号をストックするので、メモリーの役割をしますが、状態の維持をしてくれるものになります。この処理を使うと、信号を維持できるようになるのですが、計算をする場合だと、最小単位でも、初項と次項の値がストックされ、それに対して演算をする回路が必要になるので、そう言った処理を実装する事になりますが、この時に演算をする部分は定数化しておかなければなりませんが、変数の場合、数値は任意の値を使うはずですから、ここは変数になるので、変数を代入した後にメモリー内のストックする必要があります。機械で処理をする場合だと、ラッチ機構のようなデータの一時記憶をさせる構造が必要になるので、メモリーのような物を用意する事になりますが、こうした機械的な処理をする時にも電気信号で行われているので二進数で動いています。この挙動がアナログ回路になりますが、この構造は歯車式の計算機からリレーに変化した後に登場した物になります。イメージとしては、ブレッドボードで電気工作の試作品を作ったりその学習を行う時にパーツを使って回路を作ると思いますが、アナログ回路の構造はこれになります。ただし、現在の構造を見ると、チップ抵抗を上面だけではんだ付けをするような方法でパターンに実装されているので裏面からはんだ付けがされていない物もありますが、こうした回路を見ると、足の数が多いパーツも存在します。この代表的なパーツには、トランジスタがありますが、高校の物理でも出て来るPNPとNPNのトランジスタも足が複数あるパーツになりますが、カットされたパターンの間に配線のように配置して通電とその変化で挙動が変わる物とは少し異なり、このパーツは3つの足があり、直通ではなく分岐が実装されています。トランジスタの登場でそれがなかった時代よりは出来る事が増えますが、アナログ回路を作ると、マイクラノレッドストーン回路のように巨大になってしまうので、配線のサイズを小さくして、パーツも微細化する事でワンパッケージにまとめるような方法がとられるようになります。これが、 【 集積回路 】 になります。
論理ゲートを使う場合、汎用ロジックICを使うと1つのバーツで複数のロジック回路を使用できるようになっています。これがさらに機能を持って複雑な処理ができるICが登場し、入力端子数問出力端子数も減り、サイズも小型化されていますが、その後、CPUなどのパーツが登場し、汎用性のある集積回路が生成されれう事になります。前の世紀には、LPGAも登場したので、 【 プログラミングで回路構造を確定することのできる回路 】 も出たのでソフトウェアの追加で、機能を変更できる仕様になっていましたが、現在は、評価キットもあるので、そプした作業を個人で行う事が出来るようになっています。
コンピューターが登場した直後は、機械語ですから、バイナリエディタでコードを書くようなイメージですが、その後、アセンブリ言語が登場し、数値の羅列からは解放されますが、レジスタに書き込む記述なので、イメージしにくいものになります。ただし、アセンブラを行うだけでコードが機械語になるので、処理の状態が変わります。C言語の場合、ダンプリストを見ると十六進数がアドレス内に並んでいるのですが、アセンブラの場合、行数が増え、処理単位でコードが返還されているので、実質的に機械語でコードを書いているのと同じ状態になります。このように 【 バイナリ寄り 】 の場合だと、ローレベルのプログラミング言語になりますが、Direct X8辺りまでは、プログラマブルシェーダーでローレベルでの制御(現在のDirect X12 Ultimateでも出来るみたいですね。)が 【 標準仕様 】 だったので、ゲームを作る=アセンブラもセットで出て来るような状態だったので、アセンブラを使う用途については、マイコンを使った制御とかではなく 【 GPUを使ったゲームでのシェーダーの処理 】 でも使用されていました。
ちなみに、C言語をアセンブラを行って機械語のダンプを見ると、儒六進数表記になっているのですが、これは、データが1バイト単ににまとまっているからです。データは二進数の桁を8桁揃えた状態にしたものが使用されているのですが、16進数だと、4桁で0~15までの数値が表記できますが、便宜上2桁合わせた8bitの状態で運用されています。これが容量でも見かける1Byte(バイト)と言う単位になります。その為、ダンプリストを見ると、00~FFまでの数値で管理がされていますが、バイナリエディタも同様にファイルの内容を見る事が出来るので、ダンプリストのような形で十六進数表記のデータを見る事が出来ます。
■ 高級言語
流石にハードウェア寄りだと厳しので、これが人間の理解しやすい言語に代わってきますが、最初に登場したのがFortrunで、その後、ホビーパソコンで普及したBASICが登場します。
前述のように機械語を使う場合には、バイナリの状態にしなくてはなりませんが、C言語と同様に人間にわかりやすい記述と二進数の羅列が同じ訳がありませんから、翻訳しなければコンピューターには理解できません。その為、何かしらの方法で翻訳をする必要があります。この時に、 【 言語を翻訳する方法 】 が用意されており、
■ コンパイル型 : 一括翻訳
■ インタプリタ型 : 逐次翻訳
をする方式が存在します。コンパイル型だと、C++などがありますが、こうした言語はコードを書いた後にコンパイルの必要がありますから、コードの記述後にコンパイルを行い実行形式にする作業が発生します。
今年でLinuxは30周年を迎えましたが、Linux環境だとgccを使う事で、色々な物をコンパイルできますからC++もフツーに学習できますが、こうした言語を使う場合には、コンパイルと言う翻訳の作業が必要になります。
1980年代~1990年代まで存在していたBASICについては、インタプリタ言語ですから、POKEやPEEKでメモリ―アドレスに直接書き込む事が可能になっていましたが、これもメモリーへの読み書きの話ですから、C言語のポインタと同じ考え方になります。その為、言語自体は、機械には全く分からない記述になっているので、コンピューターにわかるようにしなければなりません。その為、コンピューターと人の言語の両方が解る 【 インタプリタさん 】 (俗称:インタプリたん)に通訳をしてもらって、1行ずつ処理をするというのがインタプリタ型言語になります。
PythonやWEBブラウザで使うECMA Script(JavaScript)もインタプリタ言語ですが、この処理についてはインタプリタの処理とは別に、JITコンパイル(実行時)と言う機能が実装されているので、BASICとは機能が異なります。JITコンパイルは実行時に機能するので、
■ モジュール
■ クラス
■ 関数
の実行時にコンパイルされる仕様の物になっているので、BAISCのような遅さにならない仕組みが用意されています。JAVAの普及で使われるようになったものになります。
C++などのようにソースコードや中間コードをコンパイルする形のものを事前コンパイラと呼びますが、コンパイルの種類には
■ JIT(Just-In-Time) : 実行時コンパイラ
■ AOT(Ahead-Of-Time) : 事前コンパイラ
の2つがあります。JAVAや.NETもC++のようなコンパイル型言語ですが、コンパイルをしている内容が異なり、AOTなんですが、仮想マシン用にコンパイルを行っています。その為、JAVAだとJDKでコンパイルを個なって、JREで実行する事ができますが、JREには調整項目があるので、VMのマシンの設定が出来るようになっています。この調整を引数で設定できるようになっているので、メモリーの割り当てなどを指定できるようになっています。.NETは実行形式の.exeが書き出されるので、C++のような環境依存型のコンパイラのようにクロスコンパイルが必要な物のように見えますが、.NET自体が仮想環境なので、仮想マシンで動作する仕組みになっています。
Pythonの場合は、Python自体が実行環境なので、インタプリタ言語ですが、外部ライブラリを使うとJITが使えるようになります。
■ ライブラリ
ライブラリはimportで読み込んで使用できるようになりますが、インストール直後には組み込み関数以外の関数を使う為に標準ライブラリが用意されています。
この中に、osとか、tkinterなどもありますが、BASICのように何でも最初から入っている訳ではないので、プチコンのBASICではそのまま使える三角関数とか乱数を使おうと思うと、Pythonではエラーになります。
と言うのも、この管理は数学関連の標準ライブラリに実装されており、それを呼び出さなければならないからです。数学関連のライブラリは、
のようになっており、mathをインポートして使う事になります。財務用に数値の範囲を狭めて桁数を増やしたdecimalも標準素日されています。
コンソールアプリで 【 サイコロ 】 や 【 おみくじ 】 を作る場合には乱数を使いますが、この場合には、randomを読み込んで使用する事になります。マイクラの統合版でも乱数をレッドストーン回路で作れるようになっていますが、
■ 疑似乱数発生器
のように0~3までの乱数を出せますが、これを3つ使うと、十進数を制御できるようになります。
■ 疑似乱数発生器を並列化した事例
このように乱数の範囲を並列化で増やす事が出来るのですが、並列化した物を統合すると、乱数の確立が変わるので、
■ 単一の乱数を取得する
■ 複数の乱数を一つの結果の判定に使う
ようにすると、乱数の発生数と統合の仕方によって乱数の重みを付ける事が出来ます。疑似乱数の場合、均一に散らばった方がいいのですが、抽選などの場合だと、重みを付けて確率を調整したほうが都合がいい場合もあります。この場合、疑似乱数を発生させて、範囲指定をする事で、乱数の発生確率を調整することもできます。
■ 疑似乱数発生器
乱数単体で結果が違うので、乱数と乱数でじゃんけんをしてもらう事もできますし、
■ 疑似乱数発生器
乱数でパターン制御をすると、射的場のターゲットの開閉の変化を乱数で制御することもできます。
■ 疑似乱数発生器
基本的にはデータ制御なので、 【 パターン 】 を日にした物を用意する事になりますが、そのパターンをデータとして記録しておいて、その結果を取得して的に伝える事になります。デコーダの作りは、
■ 疑似乱数発生器
と同じですが、これは、シフトレジスターをカウンターとして使っているので、カウントと共にデコーダの切り替えが発生する仕組みになっています。この場合、ボタンでカウンターが回る仕組みになっていますが、順番に切り替わるような作りだとこんな感じになります。つまり、同じような回路を作っても制御系を変えると、挙動も変わってしまうわけです。
マイクラのレッドストーン回路は信号の変化なので、二値ですが、機械の動作も電気で制御をする場合には二値で判断できますから、信号の有無で判断した場合にはレッドストーン回路と同じ挙動になります。(注:インバーター回路やクロック回路は考え方が違う物がありますし、疑似乱数発生装置は統合版特有の機能なので、現実世界もそうですが、JAVA版でも存在しません。逆に、JAVA版のBUD回路やCUD回路などはJAVA版専用なので統合版には存在しません。)
レッドストーン回路はアナログ回路に似ているので、同じ考え方ができますが、信号で動く物の挙動については、こんな感じになります。コードを使った場合には、こうした挙動を実装関数で処理をすることになりますが、乱数については、標準ライブラリなので、importを使って読み込む必要があります。
■ 処理の高速化
処理の高速化をする場合、ファイルの読み書きだと、ライブラリからosをインポートしてして、openを使うと読み書きが出来るようになりますが、この時にバイナリ方式でファイルを作り読み書きをすると高速化ができます。これとは別に処理自体を高速化する場合だと、標準ライブラリにスレッド関連の物が用意されているので、それを用いるとスレッドを効率的に使えるようになります。
現在のCPUでは、メニーコア化が進んでいるので、クラスター化が出来るようになっていますし、アプリケーションの動作をする際にもスレッドの割り当てが行われています。多くの場合、自動でスレッドの数が指定されていますが、GIMPでは、スレッド数と作業時のメモリーの割り当てが出来るようになっています。
GIMPを立ち上げ、【 編集 】 ➡ 【 設定 】 を選択すると、
のようなダイアログが出てきますが、この上部を見ると、
のようになっています。この中のタイルキャッシュの容量を増やとメモリー内で作業できることが出来る容量が増加するので、ストレージの区画をメモリーの代わりに使うようなことはなくなります。ストレージとメモリーでは速度が異なるので、通常は、ストレージの区画を頻繁にアクセスが発生する処理に使用する事はないので、メモリー内で処理できることはメモリーで対応する事になります。その為、画像処理については、メモリーのパフォーマンスがそのまま反映されるような仕組みになっています。
先日、ArdarLakeが発売されましたが、Lightroomのようにメモリー依存度が高い処理だと、高速なメモリーになるほど速度が向上し、メモリーの容量が多いほど効果が出るのですが、同じマザーで同じCPUの環境でも、現状のBIOSの状態やファームウェアの状態だと、DDR4で動作させるよりもDDR5のほうが高速になっていました。第11世代と比較すると、ダブルスコア位の差が出ていた(大量の枚数の物を同じ設定でプリセットを用意してバッチ処理で1000枚暗い処理をするような場合だとそうなります。つまり、シーケンシャルがあって、一旦、ノーマライズだけ行ってなってTiffとかで書き出すような条件だと、数千枚というのもそれほど多い枚数ではないのですが、そう言った処理を行った時にシャープネスとかを加えて重くした状態で試すとこう言ったスコアの差が出ます。画像処理については、ブラーを作るのはレイヤーの枚数を増やして対応できるのでそれほど負荷が高くならないのですが、ガウスボカシはAIの処理と同じで畳み込みを行っているので、スペックが高いほど高解像度の画像に対して行う時間が短くなります。)ので、同じ処理を行うとしてもアーキテクチャの違いによって結果が全く宇異なる訳です。第7世代のCore i7が出た当時も 【 かなり速い 】 と言われていましたが、第8世代以降が出ると、 【 第7世代は遅い 】 という話になり、第7世代とそれ以降を比較すると、 【 何だか過剰に高速化したように見えてしまう良なさが出てしまっている 】 という問題も出ていました。なので、第8世代の登場以降は第7世代は遅いというのが定説になり、現状だと、新規に導入する場合だと、中古品のようにアーキテクチャの世代が古い場合だと、スレッド数が少ない時代の物は選択肢から除外したほうがいいというのが定説になっています。
スレッド数は処理に関係していますが、メモリーでも速度が全く変わってきますし、大量の配列を扱う場合、メモリー搭載量が重要になります。
スレッド数を使う場合、データの総数も多いはずですから、メモリーの空き区画が多いほうがいいのですが、CPUで演算を行う場合だと、スレッド数を増やしてクラスター処理をしたほうが高速なので、スレッドが多いほど効いてきます。
■ 外部ライブラリ
外部ライブラリには、色々な物がありますが、Pythonの場合、AI関連でも使えるので、
■ Tensorflow
https://www.tensorflow.org/?hl=ja
のように機械学習や深層学習を行えるライブラリもありますが、深層学習だと
■ Pytourch
と言うライブラリもあります。そして、機械学習ではデータの整理をする必要がありますから、
■ Pandas
のようにデータの前処理をするライブラリも使います。データを扱う時には複雑な計算を行う事になりますが、この場合に、
■ NumPy
■ SciPy
のようなライブラリを使う事になりますが、用意したデータをグラウ化する場合には、
■ matplotlib
のような外部ライブラリを使う事で、グラフ化できます。matplotについては、
■ Jupyter Notebook 【 Python&Visual Studio Code 】
の中で、
■ Jupyter Notebook
と一緒に紹介していますが、
のようなタンイツノサンプルの推移を示すときに使用する折れ線グラフや
の中で紹介したようにヒストグラムも作れます。
基本的にデータがあればそれをグラフにできるライブラリがあるので、最初にプログラムを作ってしまえば集計が出来るようになっていますが、グラフ化して表示する時にこのライブラリを使用します。
AIの分野では画像解析を使用しますが、この時には、
■ Open-CV
を使います。これは画像や映像の解析にも使用できるライブラリなので使用する範囲が広いのですが、カメラの映像から情報を解析する場合に使用できます。
Pythonにはゲームエンジンが用意されていますが、
■ Pyxel
https://github.com/kitao/pyxel
と言うドット絵を使ったゲームを作れるゲームエンジンも存在しています。また、ゲームエンジンだと、
■ Pygame
もありますが、カメラモジュールも使えるので、カメラから入力した画像を使ったあ色々な処理が行える仕様になっています。
YouTubeにはこのエンジンを使って製作されている方が動画をアップされていますが、
のような感じの事が出来るようです。そして、3DCGを使ったゲーム制作用のSDKだと、
■ Panda 3D
もあります。このゲームエンジンでゲームを使って制作されたゲームの動画もアップされていますが、
のような事が出来るようです。
処理の効率化を図る場合、JITコンパイルとインタプリタでの動作をの速いほうを選んで処理を実行させた方がいいのですが、この場合、JITコンパイルが出来る条件を用意する事になります。
外部ライブラリには、JITコンパイルが行える
■ Numba
と言う物もあるようです。ライブラリを読み込んで、対象臼関数やクラスやモジュールなどに適応すると実行時にコンパイルして実行してくれるようになるライブラリですが、サイトを見ると、
■ スレッドの簡略化
■ SIMDのベクター処理(SSE / AVX / AVX512)
■ AMDのROCmによるGPUアクセラレーション
■ AMDのROCmによるGPUアクセラレーション
に対応しているようです。
Pythonはコンパイル型言語ですが、.exe形式のような実行ファイルの形にできるライブラリもあります。
■ PyInstaller
また、公式サイトには、対応しているライブラリも公開されているので、対象の物だと実行ファイルにしても動くようです。
■ Suppoted packages
https://github.com/pyinstaller/pyinstaller/wiki/
■ Pythonを使う場合
Pythonは、インタプリタ言語なので、Pythonのインストールされた環境でなければ動作しないのですが、これはPython自体がインタプリタとして機能している為です。
インストール後にそのままコードを書く場合に使用でできるのは、組み込み関数のみなので、最初に学習すrのは、この組み込み関数を使った物になります。組み込み関数中には、クラスや関数を製作する時に使用する
■ class
■ def
も含まれています。
Pythonでは、コンソールで動作するバックエンドで動く物を作る仕様になっているので、組み込み関数のみだと、コンソール上で動くコンソールアプリしか作れません。また、一部機能は標準ライブラリを使う事になります。
Pythonのインストール後には、標準ライブラリが用意されているので、これを 【 impot 】 で使うと標準ライブラリを詩硫黄する事ができます。前述のように 【 計算 】 をする場合にも 【 math 】 が必要ですし、ファイルへの読み書きを行う場合には 【 open 】 を読み込む必要があります。
標準ライブラリの中には、GUI関連お物があり、 【 tkinter 】 を使う事で、GTKを使ったアプリケーションを作る事ができます。これを用いると、コンソールではなく、 【 ウインドウ上で動く物 】 を作れるので、デスクトップで展開して動作するアプリケーションを作る事ができます。
ただし、オブジェクトを使っているので、オブジェクト内でどう言った動きになるのか?を
■ アクションの発生 : オブジェクトの記述側
■ リアクション : メインの処理のコードでの指定
を行う必要があるので、フォームの指定のファイルとクラスやモジュールや関数の指定の記述の2つが必要になります。
この構造は、HTMLファイルでフォームを作って、それを外部のECMA Scriptで制御するような形に似ていますが、C#のXAMLとC#の組み合わせもこの処理に似ています。
その為、【 オブジェクトの配置&アクションの発生 】を記述して、それに対しての 【 リアクション 】 をコードで書くような流れになるので、 【 オブジェクトで何かが起きた時 】 という反応を実装できるようになります。この 【 アクション 】 ➡ 【 リアクション 】 が実装できるので、Tkinterを使うと、
■ キープレスイベント
■ マウスアクション
などのリアルタイムで反応する処理を使用できるようになります。マルチメディア関連だと、
■ ウィジェットの利用
■ 音の再生
が可能なので、スプライトを用意して動かす事や効果音やBGMを入れる事もできるようになっていますから、 【 標準ライブラリでもゲームを作れる仕様 】 になっています。
そして、標準ライブラリでは、スレッドの制御が出来るので、メニーコアノCPUの環境で作業をする時に
【 スレッドのコントロールができるアプリケーションの開発 】 を
【 標準ライブラリだけで開発できる 】 仕様
になっています。
Pythonは外部ライブラリを追加すると色々な事が出来るようになりますが、AI関連の物は外部ライブラリになります。今回は一部の外部ライブラリについて紹介しましたが、外部ライブラリは多種多様で、膨大な数が存在しています。
GPUアクセラレーションですが、この場合、CUDAを使う場合だと、GPUがCUDAコア対応と言うのも必須条件になりますが、こうした作業を行う場合、VRAMの容量を超える処理が出来ない商になっています。その為、GPUコンピューティングやGPUアクセラレーションの効く処理を使う場合には、GPUのグレードを高くする必要がありますが、それと同時に
■ VRAMの容量
■ メモリーの容量
も同様に多くしておく必要があります。つまり、VRAMの容量が大きく、度の出るGPUを用意いすることになります。あと、研究用途だとゲーミング製品だと問題があるので、専用のGPUを使う事になります。この辺りが、単精度で研究用途よりも変数の総数が少なくて済む(と言っても、これでもかなりの量のデータの処理をしていますが...。)ゲーミング用途と制度が必要になる研究用途との違いになります。