Contents

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)