[[NumPy]]

NumPy

Pythonの重要な外部パッケージ。NumPyの無いPythonなんて夏休みの無い八月のようなもの。

使い方などは公式や数多のブログに敵うわけ無いので、ハマりやすい点についてメモ。

インストール

Windows, Anacondaでのインストールを想定。

意図的に除かない限り、普通はAnacondaでの環境作成時に同時にインストールされている。

一応個別にインストールする場合は

> conda install numpy

MKL

NumPyは、インテル製のライブラリ mkl を使っている。これのおかげでPythonは行列演算などに関して高速に動作する。

Anacondaでは、環境毎にmklも適切に配置・パス設定してくれるが、忘れた頃にこれに起因するエラーが襲いかかる。

import numpy の行でエラー
↓
Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.

エラーが発生するタイミングは、import時だったり、実際に関数を呼び出した時だったり。

原因は、NumPyの要求するバージョンと、実際に読み込まれているMKLのバージョンが食い違うことが多いと思われる。

mkl関連のライブラリがある代表的な場所は、

  • C:\Windows\System32
    • Pythonでは無く、他のプログラムのインストール時に入ることがある?
  • (Anaconda)\Library\bin
    • ルート環境のMKL
  • (Anaconda)\envs\(env_name)\Library\bin
    • 各環境のMKL

condaでは mkl パッケージで管理されてるっぽい(推量)? このバージョンとビルド番号で区別できるか。

原因1:NumPyとmklのバージョン不整合

アップデートのし忘れなどで、いつの間にか両者のバージョンが食い違ってしまう場合があり、その際にエラーが出る。NumPyのアップデートで解消するはず。

> conda update numpy

原因2:パス設定

System32は普通は環境変数のPathに設定されているので、そちらのdllが読まれることがある。当然NumPyの要求するバージョンが異なるとエラーとなる。

対策としては、System32のmklは削除してもあんまり問題になった経験が無いので、mkl_xxx.dll を削除して様子を見る。(バックアップは取っておく)

また、(Anaconda)\Library\bin をPathに入れてたりすると、envs内の環境を使っているつもりでもルート環境のmklが読まれてしまうというケースもある。

コマンドラインから activate した時は仮想環境用のPathが本来のPathより優先されるため実行できるが、PyCharmなどIDEを使っていると、IDEが環境を再現しようと追加したPathより本来のPathが優先され、エラーとなり、両者で挙動が異なる、ということもある。

programming/python/packages/numpy.txt · 最終更新: 2018/10/01 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0