【要約】NumPyでゼロから作る量子シミュレータ|状態ベクトルで量子を"自作"する [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
量子計算の学習者が、既存の高度なライブラリに依存することで、内部の数学的挙動を理解できないという課題がある。Qiskitなどのツールは利便性が高い反面、計算プロセスがブラックボックス化しやすい。具体的には以下の問題が挙げられる。
- ・量子状態がどのように複素数で表現されているか不明瞭である。
- ・量子ゲートが状態ベクトルにどのような行列演算を行うか直感的に掴めない。
- ・測定による確率分布の生成プロセスが抽象化されすぎている。
// Approach
筆者は、量子力学の数学的定義を直接コードに落とし込むことで、内部挙動を可視化するアプローチを採用した。NumPyのみを使用し、以下のステップで実装を行っている。
- ・状態の定義:nビットの状態を、2^n個の複素数を持つベクトルとして初期化する。
- ・ゲートの適用:
np.kronを用い、対象ビット以外を単位行列で埋めた巨大な行列を生成し、状態ベクトルに乗算する。 - ・測定の実装:状態ベクトルの振幅の絶対値の2乗を確率分布とし、
np.random.choiceでサンプリングを行う。
// Result
実装の結果、100行に満たないコードで量子計算の基本要素を完全に再現することに成功した。これにより、以下の挙動を数値的に確認できる。
- ・重ね合わせ:アダマールゲートにより、0と1が等確率で現れる状態を生成した。
- ・量子もつれ:CNOTゲートを用い、ベル状態(|00⟩と|11⟩の相関)を構築した。
- ・測定の検証:サンプリングにより、理論値に基づいた確率分布が得られることを示した。
Senior Engineer Insight
> 教育やアルゴリズムの概念検証としては、極めて明快で優れた実装である。しかし、計算量が2^nで指数関数的に増大する点は実戦では致命的だ。30〜40量子ビットでメモリ限界に達するため、大規模シミュレーションには耐えられない。実用的な規模を扱う場合は、テンソルネットワーク法やGPUによる並列演算を検討すべきである。