matlab相关tips

  1. size()
    sz = size(A)
    szdim = size(A,dim)
    [m,n] = size(A)
    [sz1,…,szN] = size(A)
    sz = size(A) 返回一个行向量,其元素包含 A 的相应维度的长度。例如,如果 A 是一个 3×4 矩阵,则 size(A) 返回向量 [3 4]。sz 的长度为 ndims(A)。
    如果 A 是表或时间表,则 size(A) 返回由表中的行数和变量数组成的二元素行向量。
    示例
    szdim = size(A,dim) 返回维度 dim 的长度。
    示例
    当 A 是矩阵时,[m,n] = size(A) 返回行数和列数。
    示例
    [sz1,…,szN] = size(A) 分别返回 A 的每个维度的长度。
  2. ndims-数组维度数目
    N = ndims(A)
    说明:N = ndims(A) 返回数组 A 的维数。维数总是大于等于 2。函数会忽略 size(A,dim) = 1 所针对的尾部单一维度。
  3. cell 元胞数组
    元胞数组是一种包含名为元胞的索引数据容器的数据类型,其中的每个元胞都可以包含任意类型的数据。元胞数组通常包含文本列表、文本和数字的组合或者不同大小的数值数组。通过将索引括在圆括号 () 中可以引用元胞集。使用花括号 {} 进行索引来访问元胞的内容。
    创建对象
    当要将数据放入一个元胞数组中时,请使用元胞数组构造运算符 {} 创建该数组。

C = {1,2,3;
‘text’,rand(5,10,2),{11; 22; 33}}
C = 2x3 cell array
{[ 1]} {[ 2]} {[ 3]}
{‘text’} {5x10x2 double} {3x1 cell}

您也可以使用 {} 创建一个空的 0×0 元胞数组。

C = {}
C =

0x0 empty cell array
要创建具有指定大小的元胞数组,请使用下面介绍的 cell 函数。

您可以使用 cell 预分配一个元胞数组,稍后再为其分配数据。cell 还可以将某些类型的 Java®、.NET 和 Python® 数据结构体转换为由等效的 MATLAB® 对象组成的元胞数组。

语法
C = cell(n)
C = cell(sz1,…,szN)
C = cell(sz)
D = cell(obj)
说明
示例
C = cell(n) 返回由空矩阵构成的 n×n 元胞数组。

示例
C = cell(sz1,…,szN) 返回由空矩阵构成的 sz1×…×szN 元胞数组,其中,sz1,…,szN 表示每个维度的大小。例如,cell(2,3) 返回一个 2×3 元胞数组。

示例
C = cell(sz) 返回由空矩阵构成的元胞数组,并由大小向量 sz 来定义数组大小 size©。例如,cell([2 3]) 会返回一个 2×3 元胞数组。

D = cell(obj) 可将 Java 数组、.NET System.String 或 System.Object 数组或者 Python 序列转换为 MATLAB 元胞数组。

输入参数
全部展开
n - 方形元胞数组的大小
整数值
sz1,…,szN - 维度大小
整数值
sz - 大小
由整数组成的行向量
obj - 输入数组
Java 数组或对象 | System.String 或 System.Object 类型的 .NET 数组 | Python 序列类型
输出参数
全部展开
C - 输出数组
元胞数组
D - 已转换的数组
元胞数组
示例
全部折叠
创建元胞数组
当相关的数据段具有不同的数据类型时,可将它们放在一个元胞数组中。每个元胞包含一段数据。要引用元胞数组的元素,请使用数组索引。您可以使用圆括号 () 对元胞数组进行索引,使用花括号 {} 对元胞的内容进行索引。

创建一个元胞数组,其中包含在给定日期测得的几个温度读数。将日期指定为字符向量,将温度指定为双精度数组。要将这些数据段存储在元胞数组中,请将它们放在花括号中。

C = {‘2017-08-16’,[56 67 78]}
C = 1x2 cell array
{‘2017-08-16’} {1x3 double}

将不同日期的读数添加到元胞数组中。要添加更多元胞,您可以通过赋值来扩展元胞数组,就像扩展普通数组一样。

C(2,:) = {‘2017-08-17’,[58 69 79]};
C(3,:) = {‘2017-08-18’,[60 68 81]}
C = 3x2 cell array
{‘2017-08-16’} {1x3 double}
{‘2017-08-17’} {1x3 double}
{‘2017-08-18’} {1x3 double}

对 C 的第一行进行索引。当您使用圆括号 () 进行索引时,将得到一个作为该元胞数组子集的元胞数组。

C(1,:)
ans = 1x2 cell array
{‘2017-08-16’} {1x3 double}

对元胞的内容进行索引。当您使用花括号 {} 进行索引时,将得到指定元胞中包含的数据段。

C{1,2}
ans = 1×3

56    67    78

方形元胞数组
创建一个由空矩阵构成的 3×3 元胞数组。

C = cell(3)
C = 3x3 cell array
{0x0 double} {0x0 double} {0x0 double}
{0x0 double} {0x0 double} {0x0 double}
{0x0 double} {0x0 double} {0x0 double}

三维元胞数组
创建一个由空矩阵构成的 3×4×2 元胞数组。

C = cell(3,4,2);
size©
ans = 1×3

 3     4     2

根据现有数组克隆大小
创建由大小与现有数组相同的空矩阵组成的元胞数组。

A = [7 9; 2 1; 8 3];
sz = size(A);
C = cell(sz)
C = 3x2 cell array
{0x0 double} {0x0 double}
{0x0 double} {0x0 double}
{0x0 double} {0x0 double}

通常可以将前两行代码合并成一行:

C = cell(size(A));
提示
使用 cell 函数创建一个由空矩阵组成的元胞数组,等同于将一个空矩阵赋给新建元胞数组的最后一个索引。例如,以下两个语句是等效的:

C = cell(3,4,2);
C{3,4,2} = [];

  1. 矩阵和元胞数组的差别

    Matlab的基本数据元素就是矩阵,可以是2维、1维(向量)、3维或更多维。

一、矩阵创建与表示
Matlab不用提前声明或定义变量,直接“起变量名、赋值、使用”。

注:Matlab的变量名必须字母开头,由字母、下划线、数字构成,对字母大小写敏感;起变量名时应避开Matlab里的关键词。



1. 特殊向量

k=1:1:10  %创建行向量k, 起始值1, 步长1,终止值10
          %默认步长是1, 同k=1:10          
          %Matlab语句结束用分号, 否则将自动输出该语句的执行结果
运行结果:k = 1 2 3 4 5 6 7 8 9 10



2.一般矩阵(字符串为元素的矩阵建议用元胞数组)

A=[1 2,3;4 5,6] %创建2行3列矩阵A, 矩阵大小不用预先定义
                    %矩阵元素必须放在“[ ]”内
                    %同行元素间用“, 或空格”隔开
                    %行与行间用“;”隔开
                    %矩阵元素可以是数值、变量、字符、函数表达式
运行结果:A = 1 2 3

4 5 6

3.特殊矩阵

ones(m,n)——生成m×n维的全“1”矩阵

zeros(m,n)——生成m×n维的全“0”矩阵

eye(m,n)——生成m×n维的单位矩阵(多余的行或列全为0)

diag(k或A) ——生成或提取对角矩阵

triu(A)——提取矩阵A的上三角部分生成上三角矩阵

tril(A)——提取矩阵A的下三角部分生成下三角矩阵

rand(m,n)——生成m×n维的(0,1)区间均匀分布的随机矩阵

randn(m,n)——生成m×n维均值为0,方差为1的标准正态分布随机矩阵

fiplr(A)——矩阵A左右翻转

fipud(A)——矩阵A上下翻转

fipdim(A,dim)——矩阵A特定维度dim(1,2)翻转

sparse()——生成稀疏矩阵

full()——将稀疏矩阵化为普通矩阵

4.矩阵的维度、大小、长度

a=ndims(A)     %返回矩阵A的维度(几维矩阵)
[I,J]=size(A) %返回矩阵A各维度维数的大小(几行,几列)
L=length(A)   %返回矩阵A各维度维数的最大值(行数,列数的最大值),常用来测量向量的大小
运行结果:a = 2 I = 2 J = 3 
L = 3



5. 矩阵拼接、扩充、变形

C = [A, B]——水平拼接

D = [A; B]——垂直拼接

repmat(A,[m,n])——重复生成m×n个的A

reshape(X, 3, 8)——把X变形为3×8的二维矩阵



二、矩阵元素的寻址和访问
1. 访问2维矩阵元素有两种方式:

(1) 行列下标索引

A(i,j)——第i行,第j列的元素

(2)线性索引,也是矩阵存放元素的顺序,reshape()变形保持该顺序

A(1),A(2), …, A(m*n)——元素依次取自第1列,再第2列,……

故A(i,j) = A( (j-1)*m+i)

两种索引间的转换函数:

[I,J] = ind2sub( size(A), IND)

[IND]= sub2ind(size(A), I, J)



find()函数常用来查找矩阵中满足一定条件的元素

A=[1 2 3;4 5 6]
ind=find(A>4)    %返回A中大于4的元素的线性索引值
[m,n]=find(A>4)  %返回A中大于4的元素的行列下标索引值
[I,J]=ind2sub(size(A),ind); %线性索引转行列下标索引
IND=sub2ind(size(A),I,J);  %行列下标索引转线性索引
运行结果:
A = 1 2 3

4 5 6

IND = 4 6

m = 2 
2

n = 2

3

2. 用冒号“:”获取矩阵的一些元素

A(i,:)——矩阵A的第i行,所有列

A(:,j)——矩阵A的第j列,所有行

A(:,i:j)——矩阵A的第i到第j列,所有行

A(i:j,k:end)——矩阵A的第i到第j行,第k到最后一列

A(:,[1,3])——矩阵A的第1、第3列,所有行

A(:)——按线性索引返回矩阵A的所有元素(向量)



3. 利用空矩阵删除矩阵元素

A(i,:) = []——删除矩阵A的第i行

A(:, j) = []——删除矩阵A的第j列

A(i:j,:) = []——删除矩阵A的第i到第j行

A(:,i:j) = []——删除矩阵A的第i到第j列

A(sub2ind(size(A),i, j)) = []——删除矩阵A的第i行第j列的元素



三、矩阵运算与矩阵函数
1. 矩阵运算

(1) 通常的矩阵间运算

加、减、乘、幂: + - * ^

左除 \ : [公式]

右除 / :  [公式]

(2) 点运算——同型矩阵各个对应位置的元素做该运算

点乘、点左除、点右除、点幂: .* .\ ./ .^

.+ .- 同+ -

(3) 矩阵运算

A’——转置

inv(A)——方阵的逆

pinv(A)——非方阵的广义逆,即ABA=A, BAB=B

norm(A)= norm(A,2); norm(A,1); norm(A,inf)——矩阵或向量的范数

det(A)——方阵的行列式

rank(A)——矩阵的秩

trace(A)——矩阵的迹

null(A)——基础解系(矩阵的零空间)

orth(A)——标准正交化

rref(A)——化行最简型(初等行变换解线性方程组)

subspace(A,B)——两个子空间的夹角(两个向量的夹角

[v,d]=eig(A)——方阵的特征值(对角阵d)与特征向量(v的列向量)



2. 矩阵函数

min(A)——按列求矩阵A最小值,min(x,[],2)按行求最小值

max(A)——按列求矩阵A的最大值,max(x,[],2)按行求最大值

mean(A)=mean(A,1)——按列求矩阵A的平均值(A非行向量)

sort(A)——矩阵各列按递增顺序排序

sort(A,'descend')——矩阵各列按递减顺序排序

sum(A)——矩阵A各列元素求和

prod(A)——矩阵A各列元素求积

dot(A,B)——A,B(同型)各列做内积(点积)

cross(A,B)——A,B(至少某个维度是3维)的外积(叉积)

cumsum(A)——每列元素的累计和(第i行是A前i-1行元素的和)

cumprod(A)——每列元素的累计积



四、三维矩阵
可以想象成一本书的“行、列、页”。

处理k个m×n的二维矩阵,可用一个m×n×k的三维矩阵A:

A(:,:, 1) 表示第1个m×n矩阵(第1页)

A(:,:, 2) 表示第2个m×n矩阵(第2页)

………………

A(:,:, k) 表示第k个m×n矩阵(第k页)

每个A(:, :, k)与2维矩阵操作一样。

五、元胞数组
矩阵只适合存放和处理若干相同类型的数据,要想同时存放和处理多种类型的数据就需要用元胞数组。

1. 元胞数组的创建
用“{ }”来创建,以区别创建矩阵的“[ ]”。 
(1) 赋值语句创建
a = {'hello' [1 2 3; 4 5 6]; 1 {'1' '2'}}  
%创建2×2的元胞数组,
%同行元素间用“, 或空格”隔开
%行与行间用“;”隔开
%第1行第1列的元胞,存放字符串'hello';
%第1行第2列的元胞,存放一个2×3矩阵
%第2行第1列的元胞,存放数 1
%第2行第2列的元胞,存放1×2元胞数组
运行结果:a = 'hello' [2x3 double]
[ 1] { 1x2 cell }
(2) 对元胞数组各元胞一一赋值
例如(1)中的元胞数组a也可以这样创建
a{1,1} = 'hello';
a{1,2} = [1 2 3; 4 5 6]; 
a{2,1} = 1;
a{2,2} =  {'1' '2'};
(3) 用cell( )函数创建

a = cell(2,3)      % 生成2×3的空元胞数组
此时, a = [] [] []    [] [] []
再赋值或操作。
2. 元胞数组元胞的访问
a{i, j}——返回第i行第j列元胞的数据内容。比如,对前例中的元胞数组a,有
a{1,2} = 1 2 3
4 5 6
a(i,j)——返回第i行第j列的元胞外观。比如,a(1,2) = [2x3 double]
3. 元胞数组的操作(函数)   
a(i,:) = []; ——删除a的第i行
iscell(a) ——判断a是否是元胞数组,返回逻辑值1或0;
celldisp(a)——显示元胞数组a中各元胞的内容;
celldisp(a,’cell1’)——显示元胞数组a中各元胞的内容,用“cell1”代替元胞数组名“a”;  
cellplot(a)——以图形化的方式显示元胞数组a的内容. 
cellfun(fun,a)——将函数fun分别做用在元胞数组a的每个元素上。 
作者:张敬信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值