Octave
来自 官方网站
- GNU Octave 是一种高级解释型语言,主要用于数值计算。它为线性和非线性问题的数值解以及执行其他数值实验提供了功能。它还为数据可视化和操作提供了广泛的图形功能。Octave 通常通过其交互式命令行界面使用,但它也可以用于编写非交互式程序。Octave 语言与 Matlab 非常相似,因此大多数程序都很容易移植。
安装
使用 octave --gui
运行 GUI,或使用 octave-cli
运行 CLI。
替代图形界面
默认的 octave GUI 包含在 octave 软件包中。或者,您可以使用以下非官方 GUI
- Cantor — 一种图形用户界面,它将其数学运算委托给多个后端之一(Scilab、Maxima、Octave 和其他)。
- JupyterLab — 基于浏览器的交互式环境,支持多种编程后端,包括 Octave。
性能
默认情况下,Octave 使用 blas 软件包进行线性代数计算。但是,此实现没有利用现代 CPU 指令。为了提高性能,可以安装 blas-openblas 软件包作为 blas 的直接替代品。根据可用的硬件,也可以使用其他 BLAS 实现,例如 Intel CPU 的 intel-oneapi-mkl 或 NVIDIA GPU 的 cuda。
为了说明这一点,可以使用以下代码来估计在 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 通过 Octave-Forge 提供了一组类似于 Matlab 工具箱的软件包。软件包的完整列表在此处:here。
软件包可以使用 #使用 Octave 的安装器 或 #使用 AUR 安装。
使用 Octave 的安装器
可以使用 Octave 的安装器管理软件包。它们安装到 ~/octave,或者使用 -global 选项安装到系统目录中。要安装软件包
octave:1> pkg install -forge packagename
control
,需要 gcc-fortran Arch Linux 软件包才能编译和安装。要卸载软件包
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 中找到(搜索软件包)。可以使用 Arch Linux 的 Octave-forge 助手脚本 半自动地创建用于 Arch 的新 Octave-forge 软件包。
绘图
Qt 是默认的绘图后端
>> available_graphics_toolkits ans = { [1,1] = fltk [1,2] = qt } >> graphics_toolkit ans = qt
或者,您可以使用 FLTK 或 Gnuplot 后端(通过安装 gnuplot)并运行以下命令
>> graphics_toolkit("gnuplot");
要使此更改永久生效,请将其添加到您的 ~/.octaverc
文件中。
读取 Microsoft Excel 电子表格
您可以使用 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: b(hex)[23m
打印时,安装 grml-zsh-config 并重新登录。
vi 模式 无法解码的令牌
将其 .inputrc
配置为 vi 模式的用户,例如,如下所示
~/.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 GUI 提示符损坏,显示为 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