Octave/Matlab 基础

整理自 Coursera 上 Machine Learning课程,第二周的内容。

硅谷的工程师们,在开发机器学习程序时,也常常会使用 Octave/Matlab 先开发一个框架,如果可以 work,那再将它转化成 C++、JAVA 等其他语言。因此,学会使用 Octave/Matlab 很重要。

Basic operation

1 ~= 2 % 判断1是否等于2
xor(1, 0) % 异或

A = pi % pi直接有
A = [1 2; 3 4; 5 6] % 生成3*2的矩阵
ones(2, 3) % 2*3的所有数为1的矩阵$
w=-6+sqrt(10)*(randn(1,10000)); % 高斯分布
hist(w) % 画出w
hist(w, 50) % 横坐标50等分画出
I = eye(4) % 单位矩阵
help eye % 查看 eye() 函数的帮助文档
help help % 查看 help 命令的帮助文档

Moving Data Around

A = [1 2; 3 4; 5 6] % 生成3*2的矩阵
size(A) % 查看A的形状,返回的值[3, 2],其实是个 1*2 的矩阵,同样也可以存起来
size(A, 1) % 返回A的第一维长度
length(A) % 返回A的最长一个维度的长度,如果A是上面的例子,那就返回3
%% 一般来说,只对向量使用 length
pwd % 查看当前工作路径,可以用 cd 命令来改变路径
ls % 列出当前目录下的文件
% 用 load 命令或 load('xxx.dat') 函数可以加载数据
who % 显示当前工作环境中的所有变量
whos % 更详细地查看当前工作环境中的所有变量
clear A % 删除变量 A (clear 用于删除某个变量)
save eye.dat I % 将变量 I 存于 'eye.dat' 文件中
clear % 清除工作空间中的所有变量
load eye.dat % 又把存在 'eye.dat' 文件中的变量 I (变量名还是I)读取了回来
save eye.txt I --ascii % 用 tet 文件(ASCII 编码)存储变量
A = [1 2; 3 4; 5 6]
A[:,2] = [10; 11; 12] % 对 A 的第二列赋值
A = A[A, [100; 101; 102]] % 在 A 的右边加一列
A(:) % 将矩阵 A 的所有值放入一个单独的列向量中

Computing on Data

A = [1 2; 3 4; 5 6];
B = [11 12; 13 14; 15 16];
C = [1 1; 2 2];
A * C % 矩阵相乘
A .* B % 矩阵对应元素相乘
A .^ 2 % A 的每一个元素取平方
1 ./ A % A 的每一个元素取倒数
Log(A) % A 的每一个元素取自然对数
exp(A)
abs(A)
1 + A % 加减号不用'.'
A' % A 的转置
max(A) % 找出每一列的A的最大值
[val, ind] = max(A) % val(ue)记录每一列A的最大值,ind(ex)记录每一列A的最大值的位置
A < 3 % 返回每个元素是否小于3
A = [1 2 3 4 5 6]
find(A < 3) % 返回满足小于3的所有位置
A = magic(3) % 生成一个 n=3 维 magic 矩阵,即将 1~n^2 的整数排列成每行每列的和相等的顺序(机器学习中一般不用)
[r, c] = find(A>=7) % 找出A中所有大于7的元素的位置,行存储在r中,列存储在c中
sum(A) % 求A的每一列的和
prod(A) % 求A的每一列的积
floor(A) % 将所有元素中的小数向下取整
ceil(A) % 将所有元素中的小数向上取整
max(rand(3), rand(3)) % 随机生成两个3*3的矩阵,每个位置都进行比较,取大的
max(A, [], 1) % A的每一列的最大值,1表示第一个维度,第三个变量的默认值为1
max(A, [], 2) % A的每一行的最大值,2表示第二个维度

%% 怎么找矩阵A中最大的元素?下面两种方法都可以:
max(max(A))
max(A(:))

A = magic(9)
sum(A, 1) % 计算 A 的每一列的和
sum(A, 2) % 计算 A 的每一行的和
sum(sum(A .* eye(9))) % 计算A的主对角线元素之和 
sum(sum(A .* flipud(eye(9)))) % 计算A的副对角线元素之和,flipud表示flip up and down,上下翻转

A = magic(3)
pinv(A) % pseudo inverse of A
A * pinv(A)

Plotting Data

%% 画正弦函数
t = [0: 0.01: 0.98];
y1 = sin(2*pi*4*t);
plot(t, y1);

%% 再画余弦函数
y1 = cos(2*pi*4*t);
plot(t, y2); % 此时,上一张图被替换成了余弦函数

%% 如果要同时画这两个函数呢?
plot(t, y1);
hold on;
plot(t, y2, 'r'); % 用红色画余弦函数

%% 再对坐标进行命名,绘制图例,注明图像标题
xlabel('time')
ylabel('value')
legend('sin', 'cos')
title('my plot')

print -dpng 'myPlot.png' % 保存图像
close % 关闭图像窗口

%% 图像可以编号,下面是在两个窗口画出两个图像
figure(1); plot(t, y1);
figure(2); plot(t, y2);

%% 窗口分割
subplot(1, 2, 1); % Divides plot a 1x2 grid, access first element
plot(t, y1);
subplot(1, 2, 1); % access second element
plot(t, y2);

axis([0.5 1 -1 1]) % 改变坐标范围
clf; % 清除图像,但不关闭窗口

A = magic(5);
imagesc(A); % 用不同颜色来可视化矩阵
imagesc(A), colorbar, colormap gray; % colorbar 表示标出颜色标尺,colormap gray 表示用灰度来标颜色

Control Statement

%% 定义函数
%% 将下面两行存入 'squareThisNumber.m' 文件中
function y = squareThisNumber(x)
y = x^2;

%% 可以用 addpath() 函数来添加 Octave/Matlab 的搜索路径
%% 将 'squareThisNumber.m' 文件所在的路径添加到搜索路径之后,就可以使用函数了
%% 函数的返回值可以是一个矩阵

你可能感兴趣的:(分析101)