Octave
公式ウェブサイト より:
- GNU Octave は主に数値解析を目的とした高水準インタプリタ言語です。線形ならびに非線形問題を数値的に解いたり、他の数値実験を行うことができます。データを可視化したり操作するためのグラフィック機能も備えています。通常、Octave は対話式のコマンドラインインターフェイスから使われますが、非対話式のプログラムを書くのにも使うことができます。Octave 言語は Matlab とよく似ているためプログラムを簡単に移植可能です。
目次
インストール
GUI インターフェイスは octave --gui
で起動し、コマンドラインインターフェイスは octave-cli
で起動します。
他のGUI インターフェイス
標準の GUI インターフェイスは octave パッケージに含まれています。それ以外の非公式 GUI フロントエンドも利用できます:
- Cantor — 数学的演算をいくつかのバックエンド (Scilab、Maxima、Octave など) の 1 つに委任するグラフィカルユーザーインターフェイス。
- JupyterLab — Octave を含む多くのプログラミングバックエンドをサポートするブラウザベースの対話型環境。
パフォーマンス
Octave は、デフォルトで線形代数計算に blas パッケージを使用します。ただし、この実装では最新の CPU 命令を利用していません。パフォーマンスを高速化するために、openblas パッケージを blas のドロップイン置換としてインストールできます。Intel CPU の場合は intel-oneapi-mkl、NVIDIA GPU の場合は cuda など、利用可能なハードウェアに応じて他の BLAS 実装も使用できます。
この点を説明するために、次のコードを使用して、NxN 行列の乗算で実行される GFLOPS の推定値を取得できます:
N = 4096; A = single(rand(N, N)); B = single(rand(N, N)); start = clock(); C = A * B; elapsedTime = etime(clock(), start); gFlops = 2 * N * N * N / (elapsedTime * 1e9)
Intel Core i7-9750H で次のコードを実行します。
octave ~/test_program.m
gFlops = 3.7222
openblas をインストールし、単一スレッドでプログラムを実行した後:
OMP_NUM_THREADS=1 octave ~/test_program.m
gFlops = 121.55
openblas に 9750H で利用可能な 12 スレッドをすべて使用させた後:
OMP_NUM_THREADS=12 octave ~/test_program.m
gFlops = 281.33
Octave-Forge
Octave は Matlab の Toolbox と同じようなパッケージのセットを Octave-Forge から提供しています。パッケージの完全なリストは こちら にあります。
パッケージは Octave から直接インストールすることも、AUR からインストールすることもできます。下を見て下さい。
Octave のインストーラーを使う
Octave のインストーラーを使うことでパッケージを管理できます。パッケージは ~/octave
にインストールされます。-global オプションを使用した場合はシステムディレクトリにインストールされます。パッケージをインストールするには:
octave:1> pkg install -forge packagename
パッケージをアンインストールするには:
octave:3> pkg uninstall packagename
Octave によって自動的にロードされるパッケージもありますが、ロードされない場合:
octave:4> pkg load packagename
または:
octave:5> pkg load all
パッケージがロードされているかどうかは pkg list
を使って確認します。アスタリスクが付いているパッケージが既にロードされているパッケージです。
Octave の起動時に全てのパッケージがロードされるようにするには:
/usr/share/octave/site/m/startup/octaverc
## System-wide startup file for Octave. ## ## This file should contain any commands that should be executed each ## time Octave starts for every user at this site. pkg load all
AUR を使う
いくつかのパッケージは AUR に存在します (パッケージを検索)。Octave-forge の新しいパッケージは Archlinux 用の Octave-forge ヘルパースクリプト を使うことで半自動的に Arch 用のパッケージを作成できます。
プロット
Qt がデフォルトのプロットバックエンドです:
>> available_graphics_toolkits ans = { [1,1] = fltk [1,2] = qt } >> graphics_toolkit ans = qt
あるいは、FLTK または gnuplot をバックエンドに使うこともできます:
>> graphics_toolkit("gnuplot");
上記の変更を永続化させるには ~/.octaverc
ファイルに追加してください。
Documentation タブのバグ
Octave バージョン 3.8.1 現在、公式 GUI の Documentation タブのリンクをクリックすると GUI がフリーズすることがあります。バグレポート #38305 によれば、Octave と Qt のシグナルハンドラが衝突するのが原因とされています。
解決法 としては次のコマンドで /usr/share/info/octave.info*
にある Octave の Info ファイルを unzip することで解決します:
# gunzip /usr/share/info/octave.info*
もしくは Documentation タブは無視して別の Info リーダーを使って下さい。
Microsoft Excel スプレッドシートを読み込む
Octave で Microsoft Excel のファイルを読み込む方法は複数存在します。
オープンフォーマットに変換する
.xls
ファイルを Octave で使う一番簡単な方法は LibreOffice の Calc (1024列まで制限) や Calligra Suite の Sheets (32768例まで制限) を使って .csv
や .ods
に変換することです。
変換したら Octave の csvread
関数を使って .csv
ファイルを利用できます:
octave:1> csvread('myfile.csv');
.ods
ファイルの場合、odsread
関数を含んでいる octave-ioAUR パッケージが必要です:
octave:1> odsread('myfile.ods');
.xlsx
ファイルの場合 AUR の python-xlsx2csvAUR パッケージを使います:
xlsx2csv -t /path/to/save/location -x /path/to/myfile.xlsx
Octave から xls ファイルを直接読み込む
XLS ファイルを使わざるをえず何らかの理由で CSV や ODS に変換できない場合、octave-ioAUR パッケージの xlsread
関数を使うことができます。
octave-ioAUR バージョン 1.2.5 から、'OCT' という名前のインターフェイスが追加されており、とくに依存パッケージを必要とせず .xlsx (.xls ではありません), .ods, .gnumeric の読み取りができます。ただし、Java ベースのインターフェイスは未だに存在します (特に .xls ファイルを読みこんだり、それらのファイル形式で書き出すときに必要)。