Basic Operations
算术运算
>>1+2
>>ans=3
>>10-7
>>ans=3
>>2*10
>>ans=20
>>1/2
>>ans=0.50000
>>2^6
>>ans=64
逻辑运算
>>1 == 2 %comparison
>>ans=0
>>1 ~= 2 %not equal
>>ans=1
>>1 && 0 %AND
>>ans=0
>>1 || 0 %OR
>>ans=1
>>xor(1,0)
>>ans=1
变量
变量赋值
>>a=3; %加上“;”表示不打印结果
>>b='hi'
>>c= (3>=1)
c=1
显示变量
>>a=pi;
>>a
a=3.1416
>>disp(a);
3.1416
保留小数点后两位输出
>>disp(sprintf('2 decimals: %0.2f',a))
2 decimals: 3.14
高精度&低精度输出
>>a=3.1416
>>format long
>>a
a=3.14159265358979
>>format short
>>a
a=3.1416
向量与矩阵(Vector and Matrix)
矩阵表示
>>A=[1 2;3 4;5 6] %A是一个2*3的矩阵,分号表示另起一行
A=
1 2
3 4
5 6
向量表示
>>v=[1 2 3] %v是一个1*3的矩阵或者说是行向量
v=
1 2 3
>>v=[1;2;3] %v是一个3*1的矩阵或者说是列向量
在[m,n]范围内以固定步长生成元素
>>v=1:0.1:2 %以0.1的步长生成范围在1~2之间的元素
>>v=1:6 %默认以1为步长
取矩阵的整行或整列
>>A(2,:) %取A的第二行所有元素
>>A(:,2) %取A的第二列所有元素
>>A([1 3],:) %取A得第一行和第三行所有元素
矩阵赋值
>>A=[1 2;3 4;5 6]
A=
1 2
3 4
5 6
>>A(:2)=[10;11;12] %把列向量[10;11;12]赋给A的第二列
A=
1 10
3 11
5 12
给矩阵增一列
>>A=[A, [100;101;102]
A=
1 10 100
3 11 101
5 12 102
把A中所有元素放入一个列向量
>>A(:)
ans=
1
3
5
10
11
12
100
101
102
合并矩阵
>>A=[1 2;3 4;5 6]
A=
1 2
3 4
5 6
>>B=[11 12;13 14;15 16]
B=
11 12
13 14
15 16
>>C=[A B]
C=
1 2 11 12
3 4 13 14
5 6 15 16
>>C=[A;B] %分号表示把B放到A下面
C=
1 2
3 4
5 6
11 12
13 14
15 16
生成全0或全1矩阵
>>ones(2,3)
ans=
1 1 1
1 1 1
>>zeros(2,3)
ans=
0 0 0
0 0 0
生成随机矩阵
>>rand(3,3) %生成3*3的矩阵,矩阵里所有元素值介于[0,1]
>>rands(3,3) %生成3*3的矩阵,矩阵的所有元素符合均值为0,标准差为1的高斯分布
绘制向量直方图
>>w=-6+sqrt(10)*randn(1,10000))
>>hist(w)
>>hist(w,50) %50代表把横坐标分隔为50条
单位矩阵
>>eye(4)
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
获取矩阵的维数
>>A=[1 2;3 4;5 6]
>>size(A)
ans=
3 2
获取向量的长度
>>v=[1 2 3 4]
>>length(v)
ans=4
加载和存储数据
显示当前path
>>pwd
显示当前path所有文件
>>ls
更改path
>>cd 'C:...'
加载数据
>>load data.dat
或者
>>load ('data.data')
查看当前所有变量
>>who
或者
>>whos
清除变量
>>clear
对数据进行运算
假设
>>A=[1 2;3 4;5 6]
A=
1 2
3 4
5 6
>>B=[11 12;13 14;15 16]
B=
11 12
13 14
15 16
>>C=[1 1;2 2]
C=
1 1
2 2
矩阵乘法
矩阵*矩阵
>>A*C %矩阵乘法
ans=
5 5
11 11
17 17
矩阵.*矩阵
>>A.*B %对应元素相乘
ans=
11 24
39 56
75 96
矩阵转置
>>A'
ans=
1 3 5
2 4 6
向量运算
>>v=[1;2;3]
v=
1
2
3
>>1./v
ans
1.00000
0.50000
0.33333
>>log(v) %取指数
ans=
0.00000
0.69315
1.09861
>>exp(v) %取对数
ans=
2.7183
7.3891
20.0855
>>-v
v=
-1
-2
-3
>>abs(v) %取绝对值
ans=
1
2
3
>>v+ones(length(v),1) %等价于v+1,给v的每个元素加1
ans=
2
3
4
有用的函数
>>a=[1 15 2 0.5];
找最值
>>val=max(a)
val=15
>>[val,ind]=max(a)
val=15
ind=2
将元素逐个与3比较
%将元素逐个与3比较
>>a<3
ans=
1 0 1 1
魔方阵
%魔方阵--所有的行和列加起来值相同
>>A=magic(3)
>>A=
8 1 6
3 5 7
4 9 2
寻找大于/小于/等于某值的元素
>>[r,c]=find(A>=7) %返回元素所在的行和列
r=
1
3
2
c=
1
2
3
向量之和
>>sum(a)
>>floor(a)
>>ceil(a)
取矩阵每一列、行的最大元素
>>A=[8 1 6;3 5 7;4 9 2]
A=
8 1 6
3 5 7
4 9 2
>>max(A,[],1) %1表示每一列的最大值,也可以用max(A)
ans=
8 9 7
>>max(A,[],2) %2表示每一行的最大值
ans=
8
7
9
>>max(max(A)) %取A得最大元素
或者
>>A(:)
>>max(A(:))
取对角元素
>>A=magic(9);
>>A.*eye(9);
>>sum(sum(A.*eye(9))) %对角元素之和
画数据
画函数曲线
>>t=[0:0.01:0.98];
>>y1=sin(2*pi*4*t);
>>plot(t,y1);
>>hold on;
>>y2=cos(2*pi*4*t);
>>plot(t,y2,'r');
>>xlabel('time');
>>ylabel('value');
>>legend('sin','cos')%标记曲线
>>title('my plot');
>>subplot(1,2,1) %1行放两张图,编号为1(从左往右第一张)
>>plot(t,y1);
>>subplot1,2,2) %1行放两张图,编号为2(从左往右第二张)
>>plot(t,y2);
>>axis([0.5 1 -1 1]) %固定横纵坐标值的范围
color bar
>>A=magic(5);
>>imagesc(A)
>>imagesc(A),colorbar,colormap gray;%逗号用于连接命令
控制语句
for
>>for i=1:10
v(i)=2^i;
>>end;
while
>>while i<=5
v(i)=100;
i=i+1;
>>end;
if
>>i=1;
>>while true
> v(i)=999;
> i=i+1;
> if i==6
> break;
> elseif i==7
> break;
> end;
>>end;
向量化表示(Vectorization)
${h\theta(x)}={\sum(j=0)^n}{\theta_j}{x_j}$=${\theta^T}{x}$
${\theta}={\left[\theta_0\ \theta_1\ theta_2]^T\right}$
${x}={\left[\x_0\ \x_1\ x_2]^T\right}$
Unvertorized implementation
Eg.1
prediction=0.0
for j=1:n+1,
prediction=prediction+theta(j)*x(j)
end;
Eg.2
double prediction=0.0;
for(int j=0;j<=n;j++)
prediction+=theta[j]*x[j];
Vectorized implementation
Eg.1
prediction=theta'*x;
Eg.2
double prediction=theta.transpose()*x;
Gradient descent的向量化实现
Gradient descent的数学表达式
${\theta_j}:={\thetaj}-{\alpha}{\frac1m}{\sum{i=1}^m}{h_\theta}{(x^(i)-y^(i))}{x_j^(i)}$
(for all j)