机器学习第二周(下)

Octave

基操,勿6

运算

5+6
3-2
5*8
1/2
2^6
1 == 2 %等于, false 逻辑值,0
1 ~= 2 %不等于, true. 逻辑值,1  note, not "!="
1 && 0 %逻辑与
1 || 0 %逻辑或
xor(1,0) %异或

赋值

a = 3; % semicolon suppresses output
b = 'hi';
c = 3>=1; %输出逻辑值,true,1

列出数值

a = pi
disp(a)
disp(sprintf('2 decimals: %0.2f', a))
disp(sprintf('6 decimals: %0.6f', a))
format long
a
format short
a

向量和矩阵

A = [1 2; 3 4; 5 6]

v = [1 2 3]
v = [1; 2; 3]
v = 1:0.1:2   % from 1 to 2, 步长0.1. 有效设定绘图坐标轴
v = 1:6       % from 1 to 6, 步长为1 (行向量)

C = 2*ones(2,3) % same as C = [2 2 2; 2 2 2]
w = ones(1,3)   % 1x3 vector of ones
w = zeros(1,3) % same as w = [0 0 0]
w = rand(1,3) % 均匀分布得出 
w = randn(1,3)% 正态分布得出 (mean=0, var=1)
w = -6 + sqrt(10)*(randn(1,10000));  % (mean = -6, var = 10) - note: add the semicolon
hist(w)    % plot histogram using 10 bins (default)
hist(w,50) % plot histogram using 50 bins
% note: if hist() crashes, try "graphics_toolkit('gnu_plot')" 
out(:, end+1) = ...  %end表示最后一列,也即要往out向量或矩阵的右面添加新的列(新的列在右式列出)
I = eye(4)   % 4x4 单位矩阵

移动数据

尺寸

sz = size(A) % 1x2 matrix: [(number of rows) (number of columns)]
size(A,1) % 行数
size(A,2) % 列数
length(v) % 最长尺寸的大小(行数和列数中取最大)

加载数据

pwd   % 显示当前目录
cd 'C:\Users\ang\Octave files'  % 变更目录
ls    % 列出当前目录的文件
load q1y.dat   % 相当于, load('q1y.dat')
load q1x.dat
who   % 列出工作空间中的所有变量
whos  % 更详细地列出所有变量
clear q1y      % clear command without any args clears all vars
v = q1x(1:10); % q1x的前10个变量
save hello.mat v;  % 将变量v保存为hello.mat文件
save hello.txt v -ascii; % 保存为ascii格式

索引

A(3,2)  % (行,列)的索引
A(2,:)  % 第二行 
        % ":" 指一个维度中所有元素
A(:,2)  % 第二列
A([1 3],:) % 第一行和第三行的所有元素

A(:,2) = [10; 11; 12]     % 将右式赋值到A的第二列
A = [A, [100; 101; 102]]; % 增加右式作为新的一列,注意右式本来就是列向量
A(:) % A所有元素排列成一列列向量

组合

A = [1 2; 3 4; 5 6]
B = [11 12; 13 14; 15 16] % same dims as A
C = [A B]  % 左右结合
C = [A, B] % 同上
C = [A; B] % 上下结合

计算数据

初始化

A = [1 2;3 4;5 6]
B = [11 12;13 14;15 16]
C = [1 1;2 2]
v = [1;2;3]
y = linspace(-10, 10, 100); %-10到10之间的100个均分数值

计算矩阵

A * C  % 矩阵乘法
A .* B % 元素乘法
A .^ 2 % A中每个元素进行平方计算
1./v   % A中每个元素进行倒数计算
log(v)  % 底是e,对所有元素进行对数运算 log e n
exp(v) % 底是e,对所有元素进行指数运算 e^n
abs(v) %对所有元素求绝对值

-v  % 等于-1*v

v + ones(length(v), 1)  % 等于 v+1

A'  % 转置矩阵

最大、最小值

a = [1 15 2 0.5]
val = max(a)
[val,ind] = max(a) % val -  向量a的最大值,ind - 最大值的索引(在向量a中的位置)
val = max(A) % 如果A是矩阵,则返回每列的最大值

比较矩阵数据并寻找

a < 3 % 检查矩阵a中小于3的数值,为真时1,为假时0
find(a < 3) % 找出矩阵a中小于3的元素的位置(每一列从上到下数,返回一个值)
A = magic(3) % 生成魔方阵(每行每列的和相同)
[r,c] = find(A>=7)  % 找到矩阵A中大于等于7的元素,并标出对应的坐标(索引),r为行数,c为一一对应r的列数,如【1,2】、【3,6】等

相加和相乘

sum(a)  % a中每列的和
prod(a) %a中每列的积
floor(a) % or ceil(a) floor向下取整,ceil是向上取整
max(rand(3),rand(3)) 两个矩阵中的元素一一比较,取其中最大的值,组成新的矩阵
max(A,[],1) %  每列的最大值
max(A,[],2) % 每行的最大值
A = magic(9)
sum(A,1) %每列的和
sum(A,2) %每行的和
sum(sum( A .* eye(9) ))
sum(sum( A .* flipud(eye(9)) )) %flipud - 矩阵的上下翻转,比如第一行变成最后一行

矩阵转置

pinv(A)   %等于:inv(A'*A)*A'

展示数据

画图

t = [0:0.01:0.98];
y1 = sin(2*pi*4*t); 
plot(t,y1);
y2 = cos(2*pi*4*t);
hold on;  % "hold off" to turn off
plot(t,y2,'r'); %红色
plot(u,v,'rx','MarkerSize',10) % rx为用十字符号标出离散数值,MarkerSize 和 10 表示选择十字符号的大小为10
xlabel('time');
ylabel('value');
legend('sin','cos'); %列出不同线表示的含义
title('my plot');
print -dpng 'myPlot.png' %保存格式为png的图片
close;           % or,  "close all" to close all figs
figure(1); plot(t, y1);
figure(2); plot(t, y2);
figure(2), clf;  % 清空图线
subplot(1,2,1);  % 一个视窗内两个并排的图,取第一个
plot(t,y1);
subplot(1,2,2);  % 一个视窗内两个并排的图,取第二个
axis([0.5 1 -1 1]);  % 改变坐标,X坐标范围为0.5至1,Y坐标范围为-1至1

更详细的plot使用,请点击链接:https://www.cnblogs.com/douyamv/p/4239994.html

矩阵(图像)展示

figure;
imagesc(magic(15)), colorbar, colormap gray;
% 逗号连接-函数调用 colorbar是色彩条,colormap 是色彩表。用灰度来展示矩阵
a=1,b=2,c=3
a=1;b=2;c=3;

控制语句

v = zeros(10,1);
for i=1:10, 
    v(i) = 2^i;
end;
% Can also use "break" and "continue" inside for and while loops to control execution.

i = 1;
while i <= 5,
  v(i) = 100; 
  i = i+1;
end

i = 1;
while true, 
  v(i) = 999; 
  i = i+1;
  if i == 6,
    break;
  end;
end

if v(1)==1,
  disp('The value is one!');
elseif v(1)==2,
  disp('The value is two!');
else
  disp('The value is not one or two!');
end

功能集成

建立功能文件

将功能代码输入到文本编辑器(例如写字板)中,并保存文件为“functionName.m”。

功能代码如下:

function y = squareThisNumber(x)

y = x^2;

调用功能文件

  • 需要导航到“functionName.m”文件的目录,并调用该功能,如下:
    % 导航到目录
    cd /path/to/function

    % 调用该功能
    functionName(args)
  • 另一种导航,添加文件夹
    % 在octave的会话中添加文件夹:
    addpath('/path/to/function/')

    % 为了在下次使用时也能包括添加的目录,但一般不使用,保存多了可能会导致路径错乱,建议还是用'cd'导航到目录中:
    savepath
    % 去除保存的路径:
    rmpath
  • 功能中可以返回多种值
    在功能文件中:
function [y1, y2] = squareandCubeThisNo(x)
    y1 = x^2
    y2 = x^3

在调用时:

[a,b] = squareandCubeThisNo(x)

矢量

矢量化是一种采用依赖循环并将其转换为矩阵运算的代码的过程。 它更高效,更优雅,更简洁。

正常代码:

prediction = 0.0;
for j = 1:n+1,
  prediction += theta(j) * x(j);
end;

矢量代码:

prediction = theta' * x;

猜你喜欢

转载自blog.csdn.net/wycgi/article/details/83904442