Octave

出自 Arch Linux 中文维基

援引自Octave 官網:

GNU Octave 是一種解釋性的高級程序設計語言, 主要應用在數值計算領域。其擁有線性和非線性問題求解,以及執行其他數值分析的能力,還為數據可視化與數據操作提供了豐富的圖形功能。 Octave通常的使用方式是交互式命令行,但其也可以用來編寫非交互式程序。 Octave語言與Matlab非常相似,因此在兩個平台編寫的大部分程序都可以很容易移植。

安裝[編輯 | 編輯原始碼]

安裝 octave軟件包。

打開GUI界面octave --gui ,或者打開命令行界面octave-cli

其他可供選擇的圖形界面[編輯 | 編輯原始碼]

默認的 octave 圖形界面 已經包含在了 octave 軟件包中。除此之外,你還可以選擇使用下列非官方的圖形界面:

  • Cantor — 一個圖形用户界面,其後端的數學運算可以由以下軟件之一提供 (Scilab, Maxima, Octave, R, Julia and others).
https://edu.kde.org/cantor/ || cantor
  • JupyterLab — 一個基於瀏覽器的交互式環境,支持多種語言作為後端,也包括Octave。
https://github.com/jupyterlab/jupyterlab || jupyterlab+jupyter-octave_kernelAUR

性能[編輯 | 編輯原始碼]

Octave默認使用blas包進行線性代數計算。然而blas的實現並未利用到現代CPU的指令集。blas-openblas作為blas的直接替代,安裝該包可提升計算性能。根據硬件配置可選擇其它BLAS實現,Intel處理器可安裝intel-oneapi-mkl包,NVIDIA圖形處理器可安裝cuda

下面的代碼估計了不同情況下計算NxN矩陣乘法的性能,以GFLOPS計:

test_program.m
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

使用全部12個線程運行該代碼:

OMP_NUM_THREADS=12 octave ~/test_program.m
gFlops = 281.33

Octave-Forge[編輯 | 編輯原始碼]

Octave提供一系列的外部包,類似於Matlab的工具箱, 參見 Octave-Forge.完整包列表參見這裏.

這些外部包可以 #通過Octave自帶安裝器安裝 或者 #通過AUR安裝.

通過Octave自帶安裝器安裝[編輯 | 編輯原始碼]

外部包可以通過Octave自帶安裝器進行管理。 一般情況下他們會被安裝到 ~/octave, 當使用-global選項的時候會被安裝到一個系統目錄。

安裝一個外部包:

octave:1> pkg install -forge packagename
注意: 一些外部包, 例如 control, 需要 gcc-fortran 包來進行編譯和安裝

卸載一個外部包:

octave:3> pkg uninstall packagename

一些包可以被Octave自動加載,對於那些沒有自動加載的包:

octave:4> pkg load packagename

不推薦加載全部的包,這可能會影響性能並造成命名衝突。如果需要加載全部包,可以調用:

octave:5> cellfun (@(x) pkg ("load", x.name), pkg ("list"));

通過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 (search packages)中找到.

適用於 Arch 的 Octave-forge 可以通過 Octave-forge helper scripts for Archlinux 實現半自動更新.

繪製圖表[編輯 | 編輯原始碼]

Qt是默認的繪圖後端:

>> available_graphics_toolkits
ans =
{
  [1,1] = fltk
  [1,2] = qt
}
>> graphics_toolkit
ans = qt

你也可以選擇FLTK,或者gnuplot然後通過以下命令切換繪圖後端:

>> graphics_toolkit("gnuplot");

將它添加進~/.octaverc以使變更一直有效.

讀取電子表格[編輯 | 編輯原始碼]

你可以使用odsread或者xlsread打開.ods, .xls以及.xlsx格式的文件,這需要安裝octave-ioAUR包:

octave:1> odsread('myfile.ods');
octave:1> xlsread('myfile.xls');
octave:1> xlsread('myfile.xlsx');

轉換成CSV格式[編輯 | 編輯原始碼]

也可以先使用LibreOffice Calc (不超過1024列)或Calligra Sheets(calligra,不超過32768列)把電子表格轉換.csv格式.

待轉換完成後您可以使用Octave內置函數csvread來讀取.csv格式文件:

octave:1> csvread('myfile.csv');

疑難解答[編輯 | 編輯原始碼]

Zsh Undecodable Token[編輯 | 編輯原始碼]

如果顯示了下面的錯誤:

undecodable token: b(hex)[23m

安裝grml-zsh-config並重新登錄。

vi Mode Undecodable Token[編輯 | 編輯原始碼]

為vi-mode模式配置.inputrc的用户,例如使用下列配置的:

~/.inputrc
$include /etc/inputrc
set editing-mode vi
$if mode=vi

set show-mode-in-prompt on
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2

set keymap vi-command
# these are for vi-command mode
Control-l: clear-screen
Control-a: beginning-of-line

set keymap vi-insert
# these are for vi-insert mode
Control-l: clear-screen
Control-a: beginning-of-line

$endif

可能會遇到Octave圖形用户界面命令行提示q>> undecodable token: \001b(hex)[6\0020(hex). 為Octave關閉show-mode-in-prompt設置可解決該問題,將上例的.inputrc改為:

~/.inputrc
$include /etc/inputrc
set editing-mode vi
$if mode=vi

$if Octave
set show-mode-in-prompt off
$else
set show-mode-in-prompt on
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2

set keymap vi-command
# these are for vi-command mode
Control-l: clear-screen
Control-a: beginning-of-line

set keymap vi-insert
# these are for vi-insert mode
Control-l: clear-screen
Control-a: beginning-of-line
$endif

$endif

另見[編輯 | 編輯原始碼]