[初学笔记]数组

来源:互联网 发布:suse 11 yum 编辑:程序博客网 时间:2024/05/20 04:49


一些常用的函数,用于创建一些特定的组合方式的数组


1 zeros() 函数创建一个数组的所有零:

生成一个空矩阵,用于给变量用于存储

>> zeros(5)
ans =
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0


2 ones() 函数创建一个数组,所有的:

一个单位矩阵

>> ones(3,4)
ans =
     1     1     1     1
     1     1     1     1
     1     1     1     1


3 eye() 函数创建一个矩阵,只有0 1

生成对角矩阵

Y = eye(n):返回n*n单位矩阵;
Y = eye(m,n):返回m*n单位矩阵;
Y = eye([m n]):返回m*n单位矩阵;
Y = eye(size(A)):返回与A一样大小的单位矩阵;


>> eye (4)
ans =
     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1

>> eye(3)
ans =
     1     0     0
     0     1     0
     0     0     1

>> eye(2)
ans =
     1     0
     0     1

>> eye(1)
ans =
     1

>> eye(0)
ans =
     []

>> eye(2,3)
ans =
     1     0     0
     0     1     0

>> a = [1 2 3];
>> eye(size(a))
ans =
     1     0     0

>> eye([2,3])
ans =
     1     0     0
     0     1     0



4 rand() 函数创建一个数组(0,1)上均匀分布的随机数:
留意前两种输入方式是不同的,rand ( 2 , 3 )    rand ( 2 : 3 ),最后的计算结果也不同

>> rand(2,3)
ans =
    0.0357    0.9340    0.7577
    0.8491    0.6787    0.7431

>> rand(2:3)
ans =
    0.3922    0.1712    0.0318
    0.6555    0.7060    0.2769

>> rand ()
ans =
    0.0462


5 magic() 函数创建一个幻方阵列。它需要一个单数的参数。该参数必须是一个标量大于或等于3。
产生相同的总和,当它的元素加入逐行,逐列或对角线幻方是一个正方形。

>> magic(3)
ans =
     8     1     6
     3     5     7
     4     9     2
>> magic(6)
ans =
    35     1     6    26    19    24
     3    32     7    21    23    25
    31     9     2    22    27    20
     8    28    33    17    10    15
    30     5    34    12    14    16
     4    36    29    13    18    11


6 多维数组

在Matlab中习惯性的会将二维数组中的第一维称为“行”第二维称为“列”,而对于三维数组的第三位则是习惯性的称为“页”。
在Matlab中将三维及三维以上的数组统称为高维数组,三维数组也是高级运算的基础

(1)徒手创建多维数组
在二维数组的基础上进行扩展为多维
先建立一个二维数组,然后扩展

下面是正确的书写方式

>> a  = [ 3 4 9; 1  5 8 ; 7 2 6];
a3(:,:,1) = a * 1;
a3(:,:,2) = a * 2;
a3(:,:,3) = a * 3;
disp(a)
disp(a3)

     3     4     9
     1     5     8
     7     2     6

(:,:,1) =
     3     4     9
     1     5     8
     7     2     6

(:,:,2) =
     6     8    18
     2    10    16
    14     4    12

(:,:,3) =
     9    12    27
     3    15    24
    21     6    18


下面是在写代码的时候有不同的地方,但是输出来是不对的,会有附带的zeros
>> a  = [ 3 4 9; 1  5 8 ; 7 2 6];
a1(:,:,1) = a * 1;
a2(:,:,2) = a * 2;
a3(:,:,3) = a * 3;
disp(a)
disp(a1)
disp(a2)
disp(a3)

     3     4     9
     1     5     8
     7     2     6

     3     4     9
     1     5     8
     7     2     6

(:,:,1) =
     0     0     0
     0     0     0
     0     0     0

(:,:,2) =
     6     8    18
     2    10    16
    14     4    12

(:,:,1) =
     3     4     9
     1     5     8
     7     2     6

(:,:,2) =
     6     8    18
     2    10    16
    14     4    12

(:,:,3) =
     9    12    27
     3    15    24
    21     6    18



(2)我们也可以使用 ones(), zeros() 或 rand() 函数创建多维数组。

>> a = zeros(1,2,3)
a(:,:,2)
a(:,:,3)
a(:,:,1) =
     0     0

a(:,:,2) =
     0     0

a(:,:,3) =
     0     0

ans =
     0     0

ans =
     0     0
>> a = ones (1,2,3)
a(:,:,2)
a(:,:,3)

a(:,:,1) =
     1     1

a(:,:,2) =
     1     1

a(:,:,3) =
     1     1

ans =
     1     1

ans =
     1     1
>> a = rand (1,2,3)
a(:,:,2)
a(:,:,3)
a(:,:,1) =
    0.4456    0.6463

a(:,:,2) =
    0.7094    0.7547

a(:,:,3) =
    0.2760    0.6797

ans =
    0.7094    0.7547

ans =
    0.2760    0.6797



(3)我们也可以使用cat()函数来建立多维数组。它结合沿着指定的维度的数组列表:

Cat命令的个事为【C=cat(dim,A1,A2,A3,A4……)】

其中dim表示的是创建数组的维度,A1,A2,A3,A4表示的是各维度上的数组。


用cat命令可以创建两个并列的同样的或者两个不同的,如果是创建只有两个维度的话,就只能并列呈现

用cat命令创建三个及其以上的维度的话,则是按一个一个来进行输出,除非自己加上矩阵


>> a  = [ 3 4 9; 1  5 8 ; 7 2 6];
% cat命令的公式 C = Cat (dim,a,a*2,a*3....)
C1 = cat(3,a,a,a)
C2 = cat(4,a,a*2,a*3,a*4)
C3 = cat(2,a,a)
C1(:,:,1) =
     3     4     9
     1     5     8
     7     2     6

C1(:,:,2) =
     3     4     9
     1     5     8
     7     2     6

C1(:,:,3) =
     3     4     9
     1     5     8
     7     2     6

C2(:,:,1,1) =
     3     4     9
     1     5     8
     7     2     6

C2(:,:,1,2) =
     6     8    18
     2    10    16
    14     4    12

C2(:,:,1,3) =
     9    12    27
     3    15    24
    21     6    18

C2(:,:,1,4) =
    12    16    36
     4    20    32
    28     8    24

C3 =
     3     4     9     3     4     9
     1     5     8     1     5     8
     7     2     6     7     2     6


>> C4 = cat(2,a,a*2)
C4 =
     3     4     9     6     8    18
     1     5     8     2    10    16
     7     2     6    14     4    12


7 常用的命令函数

数组函数

MATLAB提供以下功能进行排序,旋转,置乱,重塑或移动数组的内容。

函数目的lengthLength of vector or largest array dimensionndimsNumber of array dimensionsnumelNumber of array elementssizeArray dimensionsiscolumnDetermine whether input is column vectorisemptyDetermine whether array is emptyismatrixDetermine whether input is matrixisrowDetermine whether input is row vectorisscalarDetermine whether input is scalarisvectorDetermine whether input is vectorblkdiagConstruct block diagonal matrix from input argumentscircshiftShift array circularlyctransposeComplex conjugate transposediagDiagonal matrices and diagonals of matrixflipdimFlip array along specified dimensionfliplrFlip matrix left to rightflipudFlip matrix up to downipermuteInverse permute dimensions of N-D arraypermuteRearrange dimensions of N-D arrayrepmatReplicate and tile arrayreshapeReshape arrayrot90Rotate matrix 90 degreesshiftdimShift dimensionsissortedDetermine whether set elements are in sorted ordersortSort array elements in ascending or descending ordersortrowsSort rows in ascending ordersqueezeRemove singleton dimensionstransposeTransposevectorizeVectorize expression



8 length,ndims,numel

>>
a = ['aa','abc','abcd']
length (a)
numel(a)
b = rand (4 ,2 ,3)
ndims(b)
a =
aaabcabcd

ans =
     9

ans =
     9

b(:,:,1) =
    0.6551    0.9597
    0.1626    0.3404
    0.1190    0.5853
    0.4984    0.2238

b(:,:,2) =
    0.7513    0.8909
    0.2551    0.9593
    0.5060    0.5472
    0.6991    0.1386

b(:,:,3) =
    0.1493    0.8143
    0.2575    0.2435
    0.8407    0.9293
    0.2543    0.3500

ans =
     3



9 循环数组内的元素排位 circshift


a=[123;456;789]% the original array a
b= circshift(a,1)% circular shift first dimension values downby1.
c= circshift(a,[1-1])% circular shift first dimension values% downby1%and second dimension values to the left%by1

a =
     1     2     3
     4     5     6
     7     8     9

b =
     7     8     9
     1     2     3
     4     5     6

c =
     8     9     7
     2     3     1
     5     6     4


10 sort 给数组进行排序

>> v = [ 23 45 12 9 5 0 19 17]  % horizonal vector
sort(v)   %sorting v
m = [2 6 4; 5 3 9; 2 0 1]  %  two dimensional array
sort(m, 1)   % sorting m along the row
sort(m, 2)   % sorting m along the column
v =
    23    45    12     9     5     0    19    17

ans =
     0     5     9    12    17    19    23    45

m =
     2     6     4
     5     3     9
     2     0     1

ans =
     2     0     1
     2     3     4
     5     6     9

ans =
     2     4     6
     3     5     9
     0     1     2



11 单位数列 cell 函数
 
参考 网址 百度经验

http://jingyan.baidu.com/article/3ea51489df85c552e61bbaeb.html

http://jingyan.baidu.com/article/7908e85c99dc3caf491ad27d.html



>> a = cell(2,3)
a = {'s01', 's02', 's03'; 's04','s05','s06'}
a{2,2}
a{1,3}
a =
    []    []    []
    []    []    []

a =
    's01'    's02'    's03'
    's04'    's05'    's06'

ans =
s05

ans =
s03


>> celldisp(a)
 
a{1,1} =
 
s01
 
 
a{2,1} =
 
s04
 
 
a{1,2} =
 
s02
 
 
a{2,2} =
 
s05
 
 
a{1,3} =
 
s03
 
 
a{2,3} =
 
s06