數組元素的標識與尋訪 數組
(做者:lcc) 函數
數組元素的標識 spa
n 「全下標(index)」標識 ip
經典數學教科書採用「全下標」標識法:每一維對應一個下標。 數學
Ø 如對於二維數組,用「行下標和列下標」標識數組的元素,a(2,3)就表示二維數組a的「第2行第3列」的元素。 it
Ø 對於一維數組,用一個下標便可,b(2)表示一維數組b的第2個元素,不管b是行向量仍是列向量。 io
n 「單下標」(linear index)標識 變量
所謂「單下標」標識就是用一個下標來代表元素在數組的位置。 im
Ø 對於二維數組, 「單下標」編號:設想把二維數組的全部列,按前後順序首尾相接排成「一維長列」,而後自上往下對元素位置執行編號。 二維數組
n 兩種「下標」標識的變換:sub2ind、ind2sub
【例4-1】單下標的使用
>>a=zeros(2, 5);
>>a(:)=-4:5
a =
-4 -2 0 2 4
-3 -1 1 3 5
% 注意數組的排列順序。
【例4-5】 sub2ind函數-雙下標轉換爲單下標
>>A = [17 24 1 8; 2 22 7 14; 4 6 13 20];
>>A(:,:,2) = A - 10
>>A(2,1,2)
>>sub2ind(size(A),2,1,2)
>>A(14)
【例4-6】 ind2sub函數-雙下標轉換爲單下標
>>b = zeros(3);
>>b(:) = 1:9
>>IND = [3 4 5 6]
>>[I,J] = ind2sub(size(b),IND)
size、length函數
Ø size函數返回變量的大小,即變量數組的行列數
Ø length函數返回變量數組的最大維數
>>a=ones(4,6)*6
>>m=size(a)
>>len=length(a)
元素與子數組的尋訪與賦值
【例4-3】一維數組元素與子數組的尋訪與賦值
>>a=linspace(1,10,5)
a =
1.0000 3.2500 5.5000 7.7500 10.0000
>>a(3) %尋訪a的第3個元素
ans =
5.5000
>>a([1 2 5]) %尋訪a的第一、二、5個元素組成的子數組
ans =
1.0000 3.2500 10.0000
>>a(1:3) %尋訪前3個元素組成的子數組
ans =
1.0000 3.2500 5.5000
>>a(3:-1:1) %由前3個元素倒序構成的子數組
ans =
5.5000 3.2500 1.0000
>>a(3:end)
ans =
5.5000 7.7500 10.0000
>>a(3:end-1)
ans =
5.5000 7.7500
>>a([1 2 3 5 5 3 2 1])
ans =
1.0000 3.2500 5.5000 10.0000 10.0000 5.5000 3.2500 1.0000
% 數組元素能夠被任意重複訪問,構成長度大於原數組的新數組。
>>a(6)
??? Index exceeds matrix dimensions.
M 下標值超出了數組的維數,致使錯誤
>>a(2.1)
??? Subscript indices must either be real positive integers or logicals.
M 下標值只能取正整數或邏輯值
>>a(3)=0 %修改數組a的第3元素值爲0
a =
1.0000 3.2500 0 7.7500 10.0000
>>a([2 5])=[1 1]
a =
1.0000 1.0000 0 7.7500 1.0000
Ø 能夠修改指定數組元素的值
Ø 一次能夠修改多個數組元素的值
Ø 要修改的數組元素的個數應與送入數組的元素個數相同
【例4-3】二維數組元素與子數組的尋訪與賦值
>>a_2=zeros(2, 4) %建立2x4的全0數組
a_2 =
0 0 0 0
0 0 0 0
>>a_2(:)=1:8
a_2 =
1 3 5 7
2 4 6 8
>>a_2([2 5 8]) %單下標方式尋訪多個元素
ans =
2 5 8
>> a_2([2 5 8]) =[10 20 30]
a_2 =
1 3 20 7
10 4 6 30
>>a_2(:,[2 3])=ones(2) %雙下標方式尋訪並修改
a_2 =
1 1 1 7
10 1 1 30
% 二維數組能夠「單下標」方式或「全下標」方式訪問、賦值;
% 「單下標」方式賦值時,等號兩邊涉及的元素個數必須相等;
% 「全下標」方式賦值時,等號右邊數組的大小必須等於原數組中涉及元素構成的子數組的大小。
>>a_2(:,end)
ans =
7
30
>>a_2(:,end-1)
ans =
1
1
>>a_2(:, end:-1:3)
ans =
7 1
30 1
>>a_2(end,:)
ans =
10 1 1 30
>>a_2(end,[2:4])
ans =
1 1 30
>>a_2 ([4 6])=6:7
a_2 =
1 1 1 7
10 6 7 30
>>a_2(end,[2:end-1])
What is the result?