matlab矩阵初级1.12

%%   获取元素
clear all;
A=[3:6;7:10]    %2*4
f1=A(1,3)                        % 第1行第3列的元素     5            
f2=A(5)                          %第5个元素            5
%%  
clear all;
A=[5:8;9:12;13:16;17:20]    %4*4
f1=A(2,:)                   %第二行的元素
f2=A(:,2)                   %第二列的元素
f3=A(1:3,1:3)               %前三行前三列的元素,即把第四列第四行删去
f4=A(1:end,end)     %最后一列

A =

     3     4     5     6
     7     8     9    10

f2:矩阵是按列去存储的,因此排序顺序就是3 7 4 8 5 所以第五个元素为5

%%  单下标和双下标的转换        矩阵是按照列存储的
clear all;
A=[5:8;9:12;13:16;17:20]
ind1=sub2ind(size(A),2,3)    %双下标转换成单下标
A(ind1)     
A(2,3)
[I,J]=ind2sub(size(A),4)    %单下标转化成双下标
ind2=sub2ind(size(A),I,J)    

A =

     5     6     7     8
     9    10    11    12
    13    14    15    16
    17    18    19    20

sub2ind将下标转换为线性索引

ind = sub2ind(sz,row,col) 针对大小为 sz 的矩阵返回由 row 和 col 指定的行列下标的对应线性索引 ind。此处,sz 是包含两个元素的向量,其中 sz(1) 指定行数,sz(2) 指定列数。

ind1 即寻找2行3列元素对应的序号,在这里对应为11   则answer是10(按列排)

同理[I,J]反映的是A矩阵中第四个元素对应的行列   即 [4,1]

%% 查找替换值
clear all;
A=[1:4;5:8;9:12;13:2:19]    %4*4
B=A>8                       %转化为BOOL值
A(A>8)=9                    %对符合条件的元素赋值(大于8)
f1=find(A>2)                %输出对应元素的序号
A(find(A>2))=0              %对符合条件的元素赋值(另一种表现形式,同理)
                            %一个是用A>8去表示的,一个是用find(A>2)(位号)去表示的

f1 =

     2
     3
     4
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16(输出为列向量)输出的为序号

%%   矩阵的合并  
clear all;
A=[1:4;5:8]   %2*4
B=[1:2;3:4]   %2*2
C=cat(2,A,B)
D=horzcat(A,B)     %水平合并
E=vertcat(A,B)     %这样就不可以

矩阵合并

cat串联数组

C = cat(dim,A,B)

当 A 和 B 具有兼容的大小(除运算维度 dim 以外的维度长度匹配)时,C = cat(dim,A,B) 沿维度 dim 将 B 串联到 A 的末尾。

horzcat 水平串联   horizon+cat

vercat 是竖直串联,两矩阵列数不相同,当然不可以串联

%%  矩阵的块操作   数据块的复制
clear all;
A=magic(2)
B=repmat(A,2,3)
C=repmat(A,[2,3])    

magic幻方矩阵

M = magic(n)

M = magic(n) 返回由 1 到 n2 的整数构成并且总行数和总列数相等的 n×n 矩阵。n 的阶数必须是大于或等于 3 的标量才能创建有效的幻方矩阵。

repmat重复数组副本

B = repmat(A,n)

B = repmat(A,r1,...,rN)

B = repmat(A,r)

B = repmat(A,n) 返回一个数组,该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时,B 大小为 size(A)*n

B = repmat(A,r1,...,rN) 指定一个标量列表 r1,..,rN,这些标量用于描述 A 的副本在每个维度中如何排列。当 A 具有 N 维时,B 的大小为 size(A).*[r1...rN]。例如:repmat([1 2; 3 4],2,3) 返回一个 4×6 的矩阵。

B = repmat(A,r) 使用行向量 r 指定重复方案。例如,repmat(A,[2 3]) 与 repmat(A,2,3) 返回相同的结果。

A =

     1     3
     4     2


B =

     1     3     1     3     1     3
     4     2     4     2     4     2
     1     3     1     3     1     3
     4     2     4     2     4     2


C =

     1     3     1     3     1     3
     4     2     4     2     4     2
     1     3     1     3     1     3
     4     2     4     2     4     2

B C效果相同

%%  将多个矩阵作为对角块产生新的矩阵
clear all;
A=magic(3)
B=[1:2;3:4]
C=blkdiag(A,B)
D=blkdiag(B,A)

blkdiag分块对角矩阵

A =

     8     1     6
     3     5     7
     4     9     2


B =

     1     2
     3     4


C =

     8     1     6     0     0
     3     5     7     0     0
     4     9     2     0     0
     0     0     0     1     2
     0     0     0     3     4


D =

     1     2     0     0     0
     3     4     0     0     0
     0     0     8     1     6
     0     0     3     5     7
     0     0     4     9     2

%%  删除矩阵中的某些元素
clear all;
A=rand(4,4)
A([1 3],:)=[]     %第一行和第三行删除
A(:,end)=[]       %最后一列进行删除

删除元素  赋空集即可

%%  矩阵的转置   复数不一样,会转化为共轭复数
clear all;
A=rand(2,4)
A1=A'
A2=transpose(A)     %效果同上一列一样,都为转置
B=[2+3i,4+5i,3;2 4+i 5+3*i]
B1=B'                          %这种情况转为共轭之后,对应元素再转为共轭
B2=ctranspose(B)               %效果同上  不过是ctranspose
B3=B.'                         %有一点不转为为共轭   普通转置

transpose, .'转置向量或矩阵

B = A.'

B = transpose(A)

B = A.' 返回 A 的非共轭转置,即每个元素的行和列索引都会互换。如果 A 包含复数元素,则 A.' 不会影响虚部符号。例如,如果 A(3,2) 是 1+2i 且 B = A.',则元素 B(2,3) 也是 1+2i

B = transpose(A) 是执行 A.' 的另一种方式,它可以为类启用运算符重载。

A =

    0.9575    0.1576    0.9572    0.8003
    0.9649    0.9706    0.4854    0.1419


A1 =

    0.9575    0.9649
    0.1576    0.9706
    0.9572    0.4854
    0.8003    0.1419


A2 =

    0.9575    0.9649
    0.1576    0.9706
    0.9572    0.4854
    0.8003    0.1419


B =

   2.0000 + 3.0000i   4.0000 + 5.0000i   3.0000 + 0.0000i
   2.0000 + 0.0000i   4.0000 + 1.0000i   5.0000 + 3.0000i


B1 =

   2.0000 - 3.0000i   2.0000 + 0.0000i
   4.0000 - 5.0000i   4.0000 - 1.0000i
   3.0000 + 0.0000i   5.0000 - 3.0000i


B2 =

   2.0000 - 3.0000i   2.0000 + 0.0000i
   4.0000 - 5.0000i   4.0000 - 1.0000i
   3.0000 + 0.0000i   5.0000 - 3.0000i


B3 =

   2.0000 + 3.0000i   2.0000 + 0.0000i
   4.0000 + 5.0000i   4.0000 + 1.0000i
   3.0000 + 0.0000i   5.0000 + 3.0000i

%%    逆时针旋转90度的K倍,默认为1倍,可以设定参数
clear all;
A=rand(2,3)
B=rot90(A)    %  逆时针旋转90
C=rot90(A,2)  %180

A =

    0.4218    0.7922    0.6557
    0.9157    0.9595    0.0357


B =

    0.6557    0.0357
    0.7922    0.9595
    0.4218    0.9157


C =

    0.0357    0.9595    0.9157
    0.6557    0.7922    0.4218

%%  矩阵的翻转  左右    上下
clear all;
A=rand(2,3)
B=fliplr(A)                      %左右翻转
C=flipud(A)                      %上下翻转
D=flipdim(A,1)                   %指定的方向翻转 ,1相当于左右,2相当于上下
E=flipdim(A,2)
%%  矩阵尺寸的改变
clear all;
X=[1:4;5:8]
Y1=reshape(X,1,8)       %%重构为1行8列的矩阵
Y2=reshape(Y1,[4,2])    %重构为4行2列的矩阵
Y3=reshape(X,size(Y2))  %重构为4行2列的矩阵  重构规则 按序号去重构

A =

    0.8491    0.6787    0.7431
    0.9340    0.7577    0.3922


B =

    0.7431    0.6787    0.8491
    0.3922    0.7577    0.9340


C =

    0.9340    0.7577    0.3922
    0.8491    0.6787    0.7431


D =

    0.9340    0.7577    0.3922
    0.8491    0.6787    0.7431


E =

    0.7431    0.6787    0.8491
    0.3922    0.7577    0.9340

reshape

重构数组


X =

     1     2     3     4
     5     6     7     8


Y1 =

     1     5     2     6     3     7     4     8   以这个为例,重构为1行8列元素 ,则按X序号排列1 5 2 6 3 7 4 8  


Y2 = Y3

     1     3
     5     7
     2     4
     6     8

%%     矩阵的加减   维数必须相同
clear all;
A=[1:4;5:8]
B=[2 2 2 2;4 4 4 4]
C=A-B
D=A+12

A =

     1     2     3     4
     5     6     7     8


B =

     2     2     2     2
     4     4     4     4


C =

    -1     0     1     2
     1     2     3     4


D =

    13    14    15    16
    17    18    19    20

%%  矩阵的相乘     直接相乘的矩阵的列数和另一个矩阵的行数相等才行  
%%有点没有点完全不一样 
clear all;
A=[1:4;5:8]
B=[2 2;2 2;2 2;2 2]
C=A*B        %直接相乘                 这个是矩阵相乘
D=A.*B'      %点乘必须具有相同的行和列   这个是矩阵对应元素相同,所以行列必须相同
E=A*10

A =

     1     2     3     4
     5     6     7     8


B =

     2     2
     2     2
     2     2
     2     2


C =

    20    20
    52    52


D =

     2     4     6     8
    10    12    14    16

%%  矩阵的相除   左右   逆
clear all;
A=[1 1 1;1 1 1;1 1 1]  %3*3
B=[1 1 1;2 2 2;3 3 3]  %3*3
C1=A\B
C2=inv(A)*B
D1=B/A
D2=B*inv(A)
E1=A^3
E2=A*A*A

inv(A) 求逆  NAN not a number  非数

A =

     1     1     1
     1     1     1
     1     1     1
B =

     1     1     1
     2     2     2
     3     3     3

C1 =

   NaN   NaN   NaN
   NaN   NaN   NaN
   Inf      Inf       Inf

C2 =

   Inf   Inf   Inf
   Inf   Inf   Inf
   Inf   Inf   Inf 

D1 =

   NaN   NaN   NaN
   NaN   NaN   NaN
   NaN   NaN   NaN。 
 

D2 =

   Inf   Inf   Inf
   Inf   Inf   Inf
   Inf   Inf   Inf


E1 =E2

     9     9     9
     9     9     9
     9     9     9

%%  矩阵的点除   左右     对应元素相除
clear all;
A=[1 1 1;1 1 1;1 1 1]
B=[1 1 1;2 2 2;3 3 3]
C1=A./B
C2=A.\B
C3=A./2
D=A.^2 

A =

     1     1     1
     1     1     1
     1     1     1


B =

     1     1     1
     2     2     2
     3     3     3


C1 =

    1.0000    1.0000    1.0000
    0.5000    0.5000    0.5000
    0.3333    0.3333    0.3333


C2 =

     1     1     1
     2     2     2
     3     3     3


C3 =

    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000


D =

     1     1     1
     1     1     1
     1     1     1

总结:点除没看懂,用到再回来看

明白了线性索引什么意思,让抽象名词具体化

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值