1 概述
octave是学习机器学习的非常方便的框架,下面对octave的语法做一个系统的介绍。
mac下安装过程比较简单:brew install octave
2 语法介绍
输入octave命令,进入octave环境。
矩阵操作
// 定义3*2矩阵
A=[1 2;3 4; 5 6;]
// 定义值都是1的矩阵
ones(m,n)
// 定义值都是0的矩阵
zeros(m,n)
// 定义单位矩阵
eye(m)
// 随机矩阵
rand(m,n)
// 转置:单引号
A'
移动数据
size函数获取矩阵的大小;length函数返回最大的维度;save函数保存数据到文件。
octave:14> size(A)
ans =
3 2
octave:15> size(A,1)
ans = 3
octave:16> size(A,2)
ans = 2
octave:17> length(A)
ans = 3
octave:18> pwd
ans = /Users/didi
octave:19> ls
2.sql VIA
3.sql a.txt
octave:20> cd /opt/work/test
octave:21> pwd
ans = /opt/work/test
octave:22> save A.data A
octave:23> save A.txt A -ascii
定位数据:
octave:24> A
A =
1 2
3 4
5 6
octave:25> A(3,2) % 第三行、第二列的值
ans = 6
octave:26> A(3,:)
ans =
5 6
octave:27> A([1,3],:) %冒号代表所有行或列,此处的含义是第1、3行所有列
ans =
1 2
5 6
octave:28> A(:,2)=[10;11;12] % 赋值语句,意思是每行的第2列替换为后面的向量
A =
1 10
3 11
5 12
octave:29> A=[A,[100;101;102]] % 在A的右边增加一个纵向量
A =
1 10 100
3 11 101
5 12 102
octave:30> A(:) % 把A所有元素使用纵向量表示
ans =
1
3
5
10
11
12
100
101
102
octave:31> B=[201;202;203]
B =
201
202
203
octave:32> C=[A,B] % A的右边追加向量B
C =
1 10 100 201
3 11 101 202
5 12 102 203
octave:33> C=[A;B] % A的下面增加横向量,B'是B的转置
error: vertical dimensions mismatch (3x3 vs 3x1)
octave:33> C=[A;B']
C =
1 10 100
3 11 101
5 12 102
201 202 203
计算数据
octave:37> A = [1 2;3 4;5 6]
A =
1 2
3 4
5 6
octave:38> C = [1 2 3;4 5 6]
C =
1 2 3
4 5 6
octave:39> A * C % 矩阵相乘
ans =
9 12 15
19 26 33
29 40 51
octave:41> A.+1 %A的每个元素加1,.代表每个元素
ans =
2 3
4 5
6 7
octave:42> A.*A % A的每个元素相乘
ans =
1 4
9 16
25 36
octave:43> B=[1 0;0 1;1 1]
B =
1 0
0 1
1 1
octave:44> A.*B % A的每个元素乘以B对应位置的每个元素
ans =
1 0
0 4
5 6
octave:45> A.^2 %A每个元素的平方
ans =
1 4
9 16
25 36
octave:46> log(A) % A每个元素的对数
ans =
0.00000 0.69315
1.09861 1.38629
1.60944 1.79176
octave:47> exp(A) %以e为底,以A每个元素为指数的幂运算
ans =
2.7183 7.3891
20.0855 54.5982
148.4132 403.4288
octave:51> abs(-A) %求绝对值
ans =
1 2
3 4
5 6
octave:52> A+1 %相当于A.+1,每个元素加1
ans =
2 3
4 5
6 7
octave:54> max(A) % 求每个列最大的值
ans =
5 6
octave:67> max(A,[],1) % 求A每个列最大值,返回值是行向量
ans =
5 6
octave:68> max(A,[],2)% 求A每行最大值,返回值是列向量
ans =
2
4
6
octave:55> V=[1 2 4 6 8]
V =
1 2 4 6 8
octave:56> max(V)
ans = 8
octave:57> V<4 % 值小于4的位置返回1,其它位置返回0
ans =
1 1 0 0 0
octave:58> find(V<4) %返回值小于4的值
ans =
1 2
octave:59> magic(5) %生成幻方矩阵,幻方矩阵是行、列、对角线相加都相等的矩阵
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
octave:60> sum(V)
ans = 21
octave:61> prod(V) % 乘积
ans = 384
octave:62> floor(V) % 取整数
ans =
1 2 4 6 8
octave:63> rand(3,2) % 随机矩阵
ans =
0.56038 0.35228
0.35527 0.93846
0.78689 0.82490
octave:65> ceil(rand(3,2)) % 四舍五入
ans =
1 1
1 1
1 1
octave:70> sum(A,1) %每列求和
ans =
9 12
octave:72> sum(A,2) % 每行求和
ans =
3
7
11
octave:73> flipud(A) % 向下翻转180度
ans =
5 6
3 4
1 2
octave:74> pinv(A) %求逆矩阵,属于伪逆,任何情况都有解
ans =
-1.33333 -0.33333 0.66667
1.08333 0.33333 -0.41667
绘图
plot(t1,y1) % 绘制图形
hold on %在旧图上绘制新图形
xlabel('time') %x轴标识
ylabel('value') %y轴标识
legend('sin','cos') % 两个图形的图例
title('title') % 整个图的标题
print -dpng 'myplot.png' %保存图片
close % 关闭图形
figure(1);plot(t1,y1) % 在画布1上画图
figure(2);plot(t1,y1) % 在画布2上画图
subplot(1,2,1) %把画布分成1行2列,现在使用第一列
axis([0.5 1 -1 1]) % x轴的坐标范围为0.5-1,y轴的范围是-1到1.
clf %清除图形
imagesc(A) % 彩色矩阵
控制语句
if else
octave:87> i = 2,
i = 2
octave:88> if(i ==1)
> disp('i == 1')
> elseif('i==2')
> disp('i==2')
> else
> disp('i !=1 and 2')
> end;
i==2
octave:89> c
for
octave:80> for i = 1:10,
> disp(i);
> end;
1
2
3
4
5
6
7
8
9
10
while
octave:81> i=0,
i = 0
octave:82> while(i<10),
> disp(i);
> i=i+1;
> end;
0
1
2
3
4
5
6
7
8
9
函数,在当前目录下定义一个.m文件,里面是函数的定义,下面的函数的意思是返回值是y1 y2,入参是x:
function [y1, y2]=fun(x)
y1 = x^2
y2 = x^3
调用该函数
fun(3)