Pythonでの利用準備
Pythonでベクトル行列などの線形演算を行う場合、numpyを使用するケースが多い(というか自分はこれしか使ったことない)と思いますが、この裏でBLASを使い、演算の時間を減らすことができます。
OpenBLASをインストールした環境においては、numpyで勝手にOpenBLASを呼び出すよう設定されましたが(筆者の環境で)、主導で設定が必要な場合は以下の手順を取ります。
現在の設定を確認する
Pythonを対話モードで起動するため以下の通り打ちます
python3
Python 3.6.8 (default, Apr 12 2022, 06:55:39)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-10)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
のようになるので
import numpy
numpy.__config__.show()
と打ち込みます。以下のように表示されます。
blas_mkl_info:
NOT AVAILABLE
blis_info:
NOT AVAILABLE
openblas_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
NOT AVAILABLE
openblas_lapack_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
quit()
と打つと終了します。
ここでopenblasについて記載があればOKです。
Numpyに設定する
(工事中)
サンプルコード
Pythonでは便利なことに基本的にはベクトルの内積も、行列積も行列ベクトル積もdotやmatmulで計算すればOKです。
ちなみに、*で計算するとアダマール積になります
import numpy as np
x =np.array([[1,2,3],
[4,5,6]])
y =np.array([[1,2,3,4],
[5,6,7,8],
[9,0,1,2]])
a=np.array([1,2,3])
b=np.array([4,5,6])
i=2
#スカラ倍(定数倍)
print(np.dot(i, y))
#Error matmulではスカラ倍は不可 -> print(np.matmul(i, y))
#Error @演算子ではスカラ倍は不可 -> print(i @ y)
#行列積
print(np.dot(x, y))
print(np.matmul(x, y))
print(x @ y)
#ベクトルの内積
print(np.dot(a, b))
print(np.matmul(a, b))
print(a @ b)