cs229笔记-octave学习笔记

1.基本操作

基本数学运算:
5+6 58 1/2 3-2
逻辑运算 如:1==2 值为0(假) 1~=2 值为1 (真) 1&&0 假 1||0 真 XOR(1,0) 真
赋值:普通变量:a=3 b=‘hi’ c=(3>=1) 显然c为真,所以c=1
矩阵:A=[1,2;3,4;5,6] 这是个三行两列的矩阵
V=1:0.1:2 意思是数值从1开始,步长为0.1,增长到2,这是一个只有一行的矩阵
V=1:6 V赋予了1到6的六个整数,也是一行的矩阵
ones(2,3) 2行3列的元素都为1的矩阵
zeros(1,3) 1行3列都为0的矩阵
rand(3,3) 3行3列元素都是随机数字的矩阵
eye(6) 6行6列的单位矩阵
help命令 对于不清楚的命令进行查询 如 help randn
size(A) A的大小 返回一个1
2的矩阵 (行数,列数)
size(A,1) A的行数
size(A,2) A的列数
length(A) A的最大维度 一般不对矩阵使用,对向量使用

2. 移动数据
pwd命令 octave当前所处路径
cd 命令 改变当前所处的路径
load(‘feature.dat’) 加载当前工作路径的这个dat文件
who命令 查看当前工作空间的所有变量
whos命令 更详细的查看当前变量信息
clear命令 清除某个变量
V=feature(1:3) 将feature的第一列前三个元素赋给V
save hello.dat V 将V存为一个名为hello.dat的文件在当前的工作路径上
save hello.txt v-ascii 存为人能看懂的文本文档
A(3,2) A矩阵第三行第二列的元素
A(2,:) A矩阵第二行所有元素
A(:,2) A矩阵第二列所有元素 (由此可见 :代表全部)
A([1,2]? A矩阵第一行和第三行的所有元素
A=[A,[1,2,3]] 在A的旁边附加了一个矩阵
A(? 把A所有元素放入一个列向量
C=[A,B] =[A B] C矩阵即A与B矩阵合起来 A左B右
C=[A;B] A上B下

3 计算数据
矩阵相乘 A*B
矩阵点乘法 A.*B 即每一个元素分别对应相乘
矩阵每一个元素平方 A.^2
矩阵每一个元素的倒数 1./A
矩阵每个元素对数运算 log(A)
自然数e的幂次运算 exp(A)
绝对值 abs(A)
转置 A’
矩阵中每一列的最大值 max(A) 或 max(A,[],1)
矩阵中每一行的最大值 max(A,[],2)
[val,ind]=max(A) A矩阵中最大值存入val 该值对应索引存入 ind
如果输入a<3,将进行逐个元素的运算 元素小于3的返回1 否则返回0
find(A<3) 找出A中小于3的元素 (返回序号 一列数完下一列)
A=magic(3) 函数将返回一个矩阵,成为魔方阵,它们所有的行和列加起来都等于相同的值
[r,c]=find(A>=7) 找出A矩阵中大于等于7的元素 r,c分别表示行和列
A中每一列的和 sum(A) 或者 sum(A,1)
A中每一行的和 sum(A,2)
flipup/flipud 向上/向下翻转

4 绘图数据
plot(t,y1) t是自变量,y1是t的函数,plot绘制出函数图像
hold on 将新的图像绘制在旧的图像之上
xlabel(‘time’) 将x轴命名 time
ylabel(‘value’) 将y轴命名 value
legend(‘sin’,‘cos’) 将两条曲线分别命名为sin,cos
tile(‘myplot’) 在图像顶部显示这幅图的标题
print -dpng ‘myplot.png’ 保存这幅图像在当前路径 名字为myplot.png
subplot(1,2,1) 将图像分为一个1*2的格子,然后接下来的plot函数使用第一个格子
sunplot(1,2,2) 使用第二个格子
axis([0.5 1 -1 1]) 将x轴设置为0.5到1 y轴为-1到1
clf 清除图像
imagesc(A) 可视化A矩阵
imagesc(A),colorbar,colormap gray 实际上是三条语句逐个执行, 生成了一个灰度分布图,然后加颜色条

5 控制语句:for,if,while
for循环例:
令v中每个元素依次等于2的1,2…次方
v=zeros(10,1)
for i=1:10,
v(i)=2^i;
end;

while循环例:
i=1;
while i<=5,
v(i)=100;
i=i+1;
end;

break语句例:
i=1;
while true,
v(i)=999;
i=i+1;
if i==6,
break;
end; //if语句结束
end; //while语句结束

if-else语句例:
v(1)=2;
if v(1)==1,
disp(‘the value is one’);
else if v(1)==2,
disp(‘the value is two’);
else
disp(‘the value is not one or two’);
end;
结果:the value is two

函数定义,下面的例子为代价函数定义,返回的是代价J

function J=costfunctionJ(x,y,theta)
% x is the “design matrix” containing our training examples.
%y is the class labels

m=size(x,1); %训练集个数m
predictions=xtheta; %假设函数
sqrerrors=(predctions-y).^2; 注意这里是 .^
J=1/(2
m)* sum(sqrerrors);
end;

6.向量化
非向量化代码实现 theta’*x
predition=0 .0;
for j=1:n+1,
prediction = prediction+theta(j)*x(j)
end;
在向量化之后,将theta,x看做两个向量
那么假设函数就变成了theta向量和x向量的内积

向量化方法:

prediction=theta’ * x;

下面看一个更复杂的例子:



要理解以上的过程,有两个地方很关键:
1:矩阵的的作用是“整合”,也就是说,矩阵的内部的计算次序其实跟我们依次计算是一样的
2:将后面那个复杂的式子用向量表示,如下是笔者总结

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值