Octave
援引自Octave 官網:
- GNU Octave 是一種解釋性的高級程序設計語言, 主要應用在數值計算領域。其擁有線性和非線性問題求解,以及執行其他數值分析的能力,還為數據可視化與數據操作提供了豐富的圖形功能。 Octave通常的使用方式是交互式命令行,但其也可以用來編寫非交互式程序。 Octave語言與Matlab非常相似,因此在兩個平台編寫的大部分程序都可以很容易移植。
安裝[編輯 | 編輯原始碼]
打開GUI界面octave --gui
,或者打開命令行界面octave-cli
其他可供選擇的圖形界面[編輯 | 編輯原始碼]
默認的 octave 圖形界面 已經包含在了 octave包 軟件包中。除此之外,你還可以選擇使用下列非官方的圖形界面:
- Cantor — 一個圖形用户界面,其後端的數學運算可以由以下軟件之一提供 (Scilab, Maxima, Octave, R, Julia and others).
- JupyterLab — 一個基於瀏覽器的交互式環境,支持多種語言作為後端,也包括Octave。
性能[編輯 | 編輯原始碼]
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