拡張機能研究所

おすすめのブラウザ拡張機能をマンガ形式で紹介!

2025/09/02 18:00

NumPyがちょっと苦手?その気持ち、なぜか分かるかも!

数値計算の定番ライブラリ「NumPy」って便利だけど、使ってみると意外とモヤモヤすることもあるよね。 そんな素朴な疑問や戸惑いを、ちょっとだけ掘り下げてみた話。
NumPyがちょっと苦手?その気持ち、なぜか分かるかも!

最近、プログラミングでよく聞くNumPyって、正直ちょっと苦手かも…って思うことがあったんだよね💭

「なんでこんなに複雑なんだろ?」って感じる人もいると思うし、わたしもまさにそうだったから。
今回は、そんなNumPyのもやもやポイントを、気楽に話してみるよ✨

NumPyって何?ちょっとだけおさらい🔧

ざっくり言うと、Pythonで数字を扱うときにすごく便利なツールなんだよね。
いろんな計算を早くできるし、データ分析や機械学習でも大活躍✨

でも、便利だからって誰でもすぐ使いこなせるわけじゃないのが実情かも🥺

なんで苦手に感じるの?理由はコレかも👀

  • 見た目がちょっと怖い
    普通のPythonのリストや数字と違って、NumPyは「配列」っていう特別な形をしてるの。
    これが最初はパッと見でわかりにくくて、ややこしいな〜って思いやすい💭

  • エラーが分かりにくい
    数字の形とか型(データ型)が合わないとすぐにバグになるけど、
    エラーメッセージが初心者には何言ってるの?って感じだったりするのよ😵‍💫

  • ドキュメントがちょっと専門的
    公式の説明は充実してるけど、難しい言葉が多くて読むのが大変だったり…💦

でも、それでも使われ続ける理由って?💡

それはやっぱり、処理の速さと便利さがあるから。
例えば大量のデータを扱うときは、普通のPythonよりNumPyを使うほうがスムーズに動くんだよね。

だから、「ちょっと苦手だけど、頑張って慣れようかな」ってなる人が多いのも納得できるかな〜って感じ🥺

どうしたらもう少し楽に付き合える?おすすめポイント✨

  • 周りに聞く・調べるを繰り返す
    わからないことは放置せず、調べたり人に聞いたりしたほうが意外と近道だったりするよ🍓

  • 小さいコードから試してみる
    いきなり大きなデータとか複雑な処理をやろうとせず、
    簡単な計算から慣れていくのがオススメ💗

  • エラーメッセージは怖がらない
    最初は意味が分からなくても、検索すれば似たような悩みを持つ人がいっぱいいるんだよね。
    少しずつ慣れていこう👀


なんとなく使い始めても、NumPyは慣れるまでにちょっと距離を感じちゃうツールかも。
でも、使いこなせるようになると便利さがグッと増すから、焦らず自分のペースでトライしてみてほしいなって思うよ💭✨

ひとことアニメーション表示ON
NumPy苦手でも一緒にがんばろっ💗

コメント

アバター

ロバート

好き嫌いは置いといて、MatlabやNumPyのベクトルAPIは慣れが必要で、特に3次元以上の`einsum`や`tensordot`は数式の説明コメントがないと分かりにくいよね。

アバター

ハンナ

C++の単純ループも3次元以上や複数処理があると読みづらくてコメント必須だから、ループが万能とは限らないんだよね。 数学とコードの繋がりを伝えるのが難しい。

アバター

キンバリー

`linalg.solve`のドキュメントは結構分かりやすいし、ブロードキャストの場所も説明されてるから、`for i, j, k...`みたいに好きにループできるのが助かる。 `None`の代わりに`np.newaxis`使うともっと見やすいよ。

アバター

マックス

NumPyは大好きだけど、一番のネックはコードじゃなくてドキュメントなんだよね。

アバター

サラ

あちこち不明瞭か不完全で、特に`np.einsum`は便利だけど説明が足りなくて使いこなすのに苦労したよ。

アバター

ノーラン

BQN使えば? 本物の(男女問わず)プログラマーならね。

アバター

エイダン

これくらいシンプルなコードを、 ```python D = np.zeros((K,N)) for k in range(K): for n in range(N): a = A[k,:,:] b = B[:,n] c = C[k,:] D[k,n] = np.mean(a * b[:,None] * c[None,:]) ``` こっちみたいに一行で済むんだよ。

アバター

エマ

``` D ← (+´˘∘⥊˘) (A ע ⌽˘⟜B ע˘ C) ``` 読みやすいし、プリントアウトもめっちゃ節約できる。

アバター

クロエ

数学にはPythonよりJulia使いたいなあ。

アバター

サム

Python好きじゃない。

アバター

クリス

こっちは続編の記事で、新しい文法とパッケージを提案してるよ:https://dynomight.net/dumpy/

アバター

レオ

`einsum`最高! 神に感謝だね。

アバター

リリー

OPが本当に欲しいのはラベル付き次元でわかりやすいxarrayだよ:https://docs.xarray.dev/en/stable/

アバター

クリス

大きい処理ならPythonのループコストは相殺されるし、小さい処理だと`einsum`の解析コストが大きいから、事前に解析済みを渡せないのは痛い。 OPへの反論じゃなく、覚えておくべきポイントね。

アバター

サム

どっちが正解? 質問直後に話題変わってるし。

アバター

ハンナ

OP、あなたが投稿者? フォントが細すぎてコード読めないよ(薄いグレーで1ピクセル線みたい)。 直してくれない?

アバター

ノーラン

``` y = linalg.solve(A[:,:,:,None],x[:,None,None,:]) ``` これ、めちゃくちゃ見づらいね。 Pythonどうしちゃったの? 昔はもうちょいマシだったのに。

アバター

ミア

肝心なポイントが抜けてる気がするよ。 ずっと「ループ使いたいけど使えない」って話だけど、ここで必要なのは並列ループの概念だよ。

アバター

ミア

例えば`for i in range(1000)`を並列に1000個のソルバーへ投げるような仕組み。

アバター

ミア

ループがダメなのは逐次実行で遅いからで、その理由は66回目の結果が67回目に影響するから。 だからループっぽいけど外部に影響を与えない制限付きの並列ループが必要で、それは慎重に実装しないとね。


関連記事