Octave学习笔记
最近在学习吴恩达老师的机器学习课程,课程中编程实践使用的Octave语言,谨以此文来记录学习过程,如有问题,欢迎指正,欢迎一起交流学习.
1.基本的算数运算
>> 2 + 3 ans = 5 >> 4 - 8 ans = -4 >> 2 * 4 ans = 8 >> 5 / 2 ans = 2.5000
>> A = [1,1;3,4]
A =
1 1
3 4
>> A > 1
ans =
0 0
1 1
2.基本的逻辑运算
>> 2 == 3 ans = 0 >> 2 ~= 3 ans = 1 >> 2 || 3 ans = 1 >> 0 && 2 ans = 0 >> 3 >= 4 ans = 0 >> 3 < 5 ans = 1
3.向量的基本表示以及取指定的元素
%1.行向量(空格或者逗号,分割) >> v = [1 2 3] v = 1 2 3 >> v = [1,2,3] v = 1 2 3 %行向量取指定列 >> v(2) ans = 2 >> v(4) error: v(4): out of bound 3 >> v(0) error: v(0): subscripts must be either integers 1 to (2^63)-1 or logicals %2.列向量(分号分割) >> v = [1;2;3] v = 1 2 3 %列向量取指定行 >> v(2) ans = 2 >> v(0) error: v(0): subscripts must be either integers 1 to (2^63)-1 or logicals >> v(4) error: v(4): out of bound 3
4.矩阵的表示
- 与向量一样,空格或逗号分割列,分号分割行
- 冒号:a:c 表示 从a到c, 步长(间隔)为1; 等价于a:>> A(2, 2)
- a:b:c 表示 从a到c, 步长(间隔)为b
>> A = [1,2;3,4] A = 1 2 3 4 >> A = [1 3; 4 5] A = 1 3 4 5 >> A = [1:2;4:6] error: vertical dimensions mismatch (1x2 vs 1x3) >> A = [1:3;4:6] %等价于 A = [1:1:3;4:1:6] A = 1 2 3 4 5 6 >> A = [1:1:3;4:1:6] A = 1 2 3 4 5 6 >> A = [1:3:7;5:2:9] A = 1 4 7 5 7 9
>> A(2, 2)
ans = 7 >> A(1,:) ans = 1 4 7 >> A(:,1) ans = 1 5 >> A(:, [1, 3]) ans = 1 7 5 9 >> A([1,2],:) ans = 1 4 7 5 7 9 >> A(:,:) ans = 1 4 7 5 7 9
5.矩阵的运算
% C = [A B],把B按列加到A上,生成C (此时 A和B的行数必须相同) % C = [A; B],把B按行加到A上,生成C (此时 A和B的列数必须相同) >> A = [1] A = 1 >> A = [A,2] A = 1 2 >> A = [A ; 3] error: vertical dimensions mismatch (1x2 vs 1x1) >> A = [A ; [3,4]] A = 1 2 3 4 >> A = [A , [ 5 ; 6 ]] A = 1 2 5 3 4 6 >> B = [7,8,9] B = 7 8 9 >> [A ; B ] ans = 1 2 5 3 4 6 7 8 9 % 将矩阵的所有数据放到一个向量中 >> A A = 1 2 5 3 4 6 >> A(:) ans = 1 3 2 4 5 6 >> A(:)' ans = 1 3 2 4 5 6 >> A A = 1 2 5 3 4 6 % 赋值: >> A A = 1 2 5 3 4 6 >> A(1,2) = 3 A = 1 3 5 3 4 6 >> A(1,:) = [0,0,0] A = 0 0 0 3 4 6 >> A(2:3,1:2) = [1,1;1,1] % A本来没有第三行,追加了第三行,其余位置用0补上 A = 0 0 0 1 1 6 1 1 0 % 矩阵的加减乘除法: >> A = [1 1;2,2] A = 1 1 2 2 >> B = [3,3;4 4] B = 3 3 4 4 >> A + B ans = 4 4 6 6 >> A - B ans = -2 -2 -2 -2 >> A - 2 ans = -1 -1 0 0 >> A * B ans = 4 6 8 12 >> -A % 相当于 -1 * A ans = -1 -1 -2 -2 >> A / 2 ans = 0.50000 0.50000 1.00000 1.00000 >> B / A % Xa=b,X=b/a(代表b乘以a的逆) warning: matrix singular to machine precision ans = 0.30000 0.60000 0.70000 1.40000 >> B \ A % aX=b,求出X。那么X=a\b(代表a的逆乘以b); ans = 2.4672e-17 2.4672e-17 5.0000e-01 5.0000e-01 % 点运算 (点乘 .*,点除./) % 维度相同:对应元素相乘 % 行维度相同:每行对应元素相乘 % 列维度相同:每列对应元素相乘 % A .* B = B .* A % 乘 *;除 /; 平方 ^;等 >> A A = 1 1 2 2 >> B B = 1 2 3 4 >> A .* B ans = 1 2 6 8 >> A ./ B ans = 1.00000 0.50000 0.66667 0.50000
6.常用的特殊矩阵
% 1.单位矩阵 % eye(N) 生成一个N行N列的单位矩阵。 % eye(M,N) 生成一个M行N列的"单位"矩阵,主对角线元素为1,其余元素为0。 % ~eye(N) 生成一个N行N列的对角线为0,其余位置均为1 的矩阵
>> eye(3) ans = Diagonal Matrix 1 0 0 0 1 0 0 0 1 >> eye(2,3) ans = Diagonal Matrix 1 0 0 0 1 0 >> ~eye(3) ans = 0 1 1 1 0 1 1 1 0 % 2.转置矩阵 >> A A = 1 4 7 5 7 9 >> A' ans = 1 5 4 7 7 9 % 3.逆矩阵 >> A A = 1 4 7 5 7 9 >> pinv(A) ans = -0.320513 0.230769 -0.051282 0.076923 0.217949 -0.076923 >> pinv(A) * A ans = 0.83333 0.33333 -0.16667 0.33333 0.33333 0.33333 -0.16667 0.33333 0.83333 % 4.全1矩阵: >> ones(3,2) ans = 1 1 1 1 1 1 % 5.全0矩阵 >> 0 * ones(2,3) ans = 0 0 0 0 0 0 >> zeros(2,3) ans = 0 0 0 0 0 0 % 6.随机矩阵 0~1的随机数 >> rand(1,3) ans = 0.57432 0.81374 0.92313 % 7.高斯分布矩阵: >> randn(2,3) ans = -0.057398 -0.526665 0.918251 -0.218253 0.984849 0.628937 >> randn(1,3) ans = -1.21260 1.06785 -0.71408 % 8.魔方矩阵: % magic是一种函数,用于产生魔方矩阵,它的每行、列以及对角线的数之和相等。n行n列的方阵,该和的值为1+2+3+.....+n^2的和再除以n,n必须为大于或等于3的整数。 ans = 8 1 6 3 5 7 4 9 2 >> magic(4) ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
7.控制语句(未完待续)