<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      語言基礎2  矩陣和數組

      矩陣和數組是matlab中信息和數據的基本表示形式    

      可以創建常用的數組和網格  合并現有的數組  操作數組的形狀和內容  以及使用索引訪問數組元素    

      用到的函數列表如下

       

       

       

      一  創建 串聯和擴展矩陣

      矩陣時按行和列排列的數據元素的二維數據元素的二維矩形數組。

      元素可以是數字、邏輯值、日期時間、字符串、categorical、或其他matlab數據類型

      >> A=100;
      >> whos A
        Name      Size            Bytes  Class     Attributes
        A         1x1                 8  double              

      構建數據矩陣 

      >> A=[12 62 93 -8]
      A =
          12    62    93    -8
      >> whos A
        Name      Size            Bytes  Class     Attributes
        A         1x4                32  double            

      >> A=[12 62;93 -8]

      A =

      12 62
      93 -8

      專用矩陣函數

      zeros(n1,n2)     n1行數    n2列數

      ones(n1,n2)

      >> zeros(2,3)
      ans =
           0     0     0
           0     0     0
      >> ones(2,4)
      ans =
           1     1     1     1
           1     1     1     1

      diag函數將輸入元素放在矩陣的對角線上 

       
      >> A = [12 62 93 -8];
      B = diag(A)
      B =
          12     0     0     0
           0    62     0     0
           0     0    93     0
           0     0     0    -8

      串聯矩陣

      使用方括號來追加現有矩陣   此方法稱為串聯

      >> A=ones(1,4);
      >> B=zeros(1,4);
      >> C=[A B]
      C =
           1     1     1     1     0     0     0     0

      串聯多個矩陣 必須具有兼容的大小,水平串聯矩陣時 行數必須相同,垂直串聯矩陣,列數必須相同。

      串聯兼容矩陣的另一種方法時使用串聯函數

      horzcat   vertcat   cat

      使用horzcat將第二個矩陣水平追加到第一個矩陣

      >> D=horzcat(A,B)
      D =
           1     1     1     1     0     0     0     0

      使用vertcat將兩個矩陣垂直連接

      >> E=vertcat(A,B)
      E =
           1     1     1     1
           0     0     0     0

      生成數值序列

      colon   創建由連續且等間距元素組成的矩陣的便捷方式。例如創建一個行向量 其元素是從1到10的整數

      >> A=1:10      默認增量為1
      A =
           1     2     3     4     5     6     7     8     9    10
      >> A=-2.5:2.5  
      A =
         -2.5000   -1.5000   -0.5000    0.5000    1.5000    2.5000
      >> A=0:2:10      指定增量為2
      A =
           0     2     4     6     8    10
      >> A=6:-1:0      增量為負值    則遞減   
      A =
           6     5     4     3     2     1     0
      >> A=1:0.2:2.1    增量為非整形值     如果增量值不能平均分指定的范圍   則會在超出范圍之前在可以達到的最后一個值處自動結束序列   此處最后為2
      A =
          1.0000    1.2000    1.4000    1.6000    1.8000    2.0000

      擴展矩陣

      通過想一個或多個元素置于現有行和列索引邊界之外,可以將他們添加到矩陣中    matlab會自動用0填充矩陣,使其保持為舉行

      例如創建一個2x3矩陣   然后在(3,4)的位置插入一個元素   使矩陣增加一行一列

      >> A=[10 20 30;60 70 80]     %A 為2x3
      A =
          10    20    30
          60    70    80  
      >> A(3,4)=1     此時(1,3)(2,3) 兩個位置為0   此時A為3x4
      A =
          10    20    30     0
          60    70    80     0
           0     0     0     1

      還可以通過現有索引范圍之外插入新矩陣來擴展其大小

      >> A(4:5,5:6)=[2 3;4 5]     執行完成后    A為5x6  矩陣   未賦值的索引位置填0
      A =
          10    20    30     0     0     0
          60    70    80     0     0     0
           0     0     0     1     0     0
           0     0     0     0     2     3
           0     0     0     0     4     5

      上例中   A(4,5)=2       A(4,6)=3        A(5,5)=4       A(5,6)=5 

       如果重復擴展矩陣的大小  例如在for循環中,最好要為預計創建的最大矩陣預分配空間,matlab必須在每次大小增加時分配內存,所以時間開銷較大。

      可以預先生成一個大的全0矩陣  

      zeros(10000,10000)    行和列都是10000的矩陣

      A=zeros(10000,10000)   如再大  需要再矩陣所以范圍之外指定元素或將另一個預分配的矩陣與A串聯來進行擴展

       

      空數組

      指至少有一個維度的長度等于零的數組  空數組可用于以編程方式表示“無”的概念

      案例:

      >> A=[1 2 3 4];
      >> ind=find(A<0)
      ind =
        空的 1×0 double 行向量

      許多算法都包含可以返回空數組的函數調用  允許將空數組作為函數參數傳遞  而不是作為特殊情況處理。

      需要自定義空數組的處理方式  可以使用isempty  函數來檢查它們

      TF=isempty(ind)

      TF=logical

      1   返回真值

      數組索引

        根據元素在數組中的位置(索引)訪問數組元素的方法主要有三種:按位置索引、線性索引和邏輯索引。

      按元素的位置進行索引

       

        指定向量中的單個元素  : A(3,2)   行列式的方式   先給行號  再給列號

      指定向量中的多個元素:A()

      A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
      a1=A(3,2)      %3行2列   索引對應的值     
      a2=A(2,[1 3])    %A(2,1)      A(2,3)
      a3=A(1:3,2:4)    %  訪問第一到第三行、第二到第四列中的元素
      a4=A(1:3,2:end)   %end為最后一列
      a5=A(:,3)%:表示所有行或所有列    此處表示所有行的第3列 全部數據
      
      輸出:
      A =
           1     2     3     4
           5     6     7     8
           9    10    11    12
          13    14    15    16
      a1 =
          10
      a2 =
           5     7
      a3 =
           2     3     4
           6     7     8
          10    11    12
      a4 =
           2     3     4
           6     7     8
          10    11    12
      a5 =
           3
           7
          11
          15

      通過索引來訪問matlab中任何數組的元素  而不管其數據類型或維度如何   例如  直接訪問datetime數組的列

      datetime數組  

      >> datetime(2018,1:5,1)   %詳情參考 datetime()函數詳情
      ans = 
        1×5 datetime 數組
         2018-01-01   2018-02-01   2018-03-01   2018-04-01   2018-05-01
      >> datetime(2018,1,1:5)
      ans = 
        1×5 datetime 數組
         2018-01-01   2018-01-02   2018-01-03   2018-01-04   2018-01-05

      使用單個索引進行索引

      線性索引   實際上數據實際的存儲方式都是按內存列式存儲

      >> A=[12 36 91;45 29 48;33 25 11]
      A =
          12    36    91
          45    29    48
          33    25    11
      >> Alinear=A(:)   %顯示全部
      Alinear =
          12
          45
          33
          36
          29
          25
          91
          48
          11
      >> A(6)     按列序   定值
      ans =
          25
      >> A(3,2)   按二維數組坐標索引定值
      ans =
          25

      >> s=sum(A(:))
      s =
      330

      sub2ind 和 ind2sub  函數可用于在數組的原始索引和線性索引之間進行轉換    例如計算A的第3,2個元素的線性索引。

      >> linearidx=sub2ind(size(A),3,2)     %  將行,列的形式轉換為線性索引單列的形式   所以(3,2)對應單列為6     返回值為6
      linearidx =
           6
      >> [row,col]=ind2sub(size(A),6)       %  將單列的線性索引形式轉換為行,列定位的形式    返回2個輸出的變量  
      row =
           3
      col =
           2

      使用邏輯值進行索引

      使用true和false  邏輯指示符也可以對數組進行索引   在處理條件語句時尤其便利。

      例如 假設想知道A中的元素是否小于另一個矩陣B中的對應元素

      當A中的元素小于B中的對應元素時,小于號運算符返回元素為1的邏輯數組。

      >> A=[1 2 6;4 3 6] 
      A =
           1     2     6
           4     3     6
      >> B=[0 3 7;3 7 5]
      B =
           0     3     7
           3     7     5
      >> ind=A<B         %判斷A和B的各個對應元素   是否滿足小于關系   是為1     否為0
      ind =
        2×3 logical 數組
         0   1   1
         0   1   0

      上例中得到了滿足條件的元素的位置;

      已經可以使用ind作為索引數組來檢查各個值

      matlab 將ind中值1的位置與A和B中的對應元素進行匹配,并在列向量中列出它們的值。

      >> Avals=A(ind)  列出A中的值
      Avals =
           2
           3
           6
      >> Bvals=B(ind)   列出B中的值
      Bvals =
           3
           7
           7

      is函數還返回邏輯數組   指示輸入中的哪些元素滿足特定條件。

      ismissing函數檢查string向量中的哪些元素時缺失值。

      >> str=["A" "B" missing "D" "E" missing];
      >> ind=ismissing(str)    返回一個索引數組    對應值為1的索引位置的字符缺失  原字符數組中包含missing的索引位置為1  其余為0
      ind =
        1×6 logical 數組   
         0   0   1   0   0   1

      假設要查找非缺失值元素的值   將~運算符和索引向量ind結合使用即可實現此目的

      >> strvals=str(~ind)                 %
      strvals = 
        1×4 string 數組
          "A"    "B"    "D"    "E"

                                     查找符合條件的數組元素

      通過對數組應用條件來過濾數組元素。

      檢查矩陣中的偶數元素、查找多維數組中所有0值的位置,或者替換數據中的NaN值。

      通過組合使用關系運算符和邏輯運算符來執行這些任務。

      >   <   <=    ==    ~=       邏輯運算符   and   or    not 分別用&    |   ~表示   從而應用多個條件。

      應用單個條件

      rng default           創建一個5x5矩陣   元素為位于1和15之間的隨機整數   
      A=randi(15,5)     randi(imax,n)   返回5x5矩陣  其中包含從區間[1,imax]的均勻離散分布中得到的偽隨機整數
      A =
          13     2     3     3    10
          14     5    15     7     1
           2     9    15    14    13
          14    15     8    12    15
          10    15    13    15    11
      >> B=A<9      使用小于號關系運算符  確定A中的哪些元素小于9     將結果存儲在B中
      B =
        5×5 logical 數組
         0   1   1   1   0
         0   1   0   1   1
         1   0   0   0   0
         0   0   1   0   0
         0   0   0   0   0     B為邏輯矩陣   每個值都表示為邏輯值的狀態   符合的元素索引位置為1   否則為0 假
      >> A(B)      B中不會指出這些元素的具體值是多少    但是可以使用B創建A的索引   從而得出滿足條件的值
      ans =        以列的形式展示出來
           2
           2
           5
           3
           8
           3
           7
           1

      由于B為邏輯矩陣   所以上面的運算稱為邏輯索引

      有時某些問題需要符合條件的數組元素的位置信息  而非其實際值。

      案例可以使用find函數來查找A中小于9的所有元素

      >> I=find(A<9)
      I =
           3
           6
           7
          11
          14
          16
          17
          22    返回的是一個由線型索引組成的列向量  每個索引描述A中一個小于9的元素的位置  因此實際上A(I)與A(B)返回的結果相同
      差別為A(B) 使用邏輯索引 而A(I)使用線性索引

      應用多個條件

      使用and  or  not  運算符將任意多個條件應用于一個數組;條件的數量并不局限于一個或兩個。

      首先,使用邏輯and運算符  由&表示  指定兩個條件:元素必須小于9且大于2     將這些條件指定為邏輯索引  以查看符合兩個條件的元素。

      >> A(A<9 & A>2)
      ans =
           5
           3
           8
           3
           7

      結果為A中同時符合這兩個條件的元素的列表。

      務必使用單獨的語句指定每個條件,并用邏輯運算符連接起來。

      例如:

      不能通過A(2<A<9)指定以上條件,因為其計算結果為A(2<A|A<9).

      接下來,查找A中小于9且為偶數的元素

      >> A(A<9&~mod(A,2))
      ans =
           2
           2
           8   線型排序  列向     顯示A中小于9的所有偶數元素的列表    使用邏輯NOT運算符~將矩陣mod(A,2)轉換為邏輯矩陣
      并在可被2整除的元素位置防止邏輯值1 true

      案例2:

      查找A中小于9   為偶數且不等于2的元素

      >>  A(A<9&~mod(A,2)&A~=2)     返回具體的值
      ans =
           8
      >> find(A<9&~mod(A,2)&A~=2)    返回元素所在的位置   索引   線性索引
      ans =   
          14                         即A(14)=8

      替換符合條件的值

      同時更改多個現有數組元素的值會很有用。將邏輯索引與簡單的賦值語句一起使用,可替換數組中符合條件的值。

      將A中所有大于10的所有值替換為數值10

      >> A(A>10)=10
      A =
          10     2     3     3    10
          10     5    10     7     1
           2     9    10    10    10
          10    10     8    10    10
          10    10    10    10    10
      >> 
      >> A(A~=10)=NaN           %將A中不等于10的所有值替換為NaN值
      A =
          10   NaN   NaN   NaN    10
          10   NaN    10   NaN   NaN
         NaN   NaN    10    10    10
          10    10   NaN    10    10
          10    10    10    10    10
      >> A(isnan(A))=0;       將A中所有NaN值替換為0   并應用邏輯NOT運算符 ~A
      >> C=~A

      C =
      5×5 logical 數組
      0 1 1 1 0
      0 1 0 1 1
      1 1 0 0 0
      0 0 1 0 0
      0 0 0 0 0

      生成矩陣用邏輯值1 替代NaN值   用邏輯值0取代10   邏輯NOT運算~A將數值數組轉換為邏輯數組,因此A&C返回邏輯值0 的矩陣    A|C返回邏輯值1的矩陣。

       

      posted on 2023-08-15 07:45  學習記錄園  閱讀(77)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 狠狠爱五月丁香亚洲综| 麻豆成人久久精品二区三| 伊人久久大香线蕉成人| 欧美性受xxxx黑人猛交| 精品一区二区三区女性色| 成人午夜大片免费看爽爽爽| 亚洲婷婷综合色高清在线 | 国产高清一区二区三区视频| 欧美激情综合色综合啪啪五月| 国产精品亚洲二区在线播放| 人妻夜夜爽天天爽| 最新国产精品亚洲| 日韩人妻无码精品无码中文字幕| 久久久久久亚洲精品成人| 亚洲精品综合一区二区在线| 亚洲人成网站在线播放2019| 国产成人精品亚洲资源| 国产成人无码A区在线观看视频| A男人的天堂久久A毛片| 昌吉市| 和艳妇在厨房好爽在线观看| 亚洲精品毛片一区二区| 国产又色又爽又黄的免费软件| 亚洲综合无码一区二区三区不卡| 福利一区二区1000| 人妻体内射精一区二区三区| 亚洲av成人区国产精品| 色欲国产精品一区成人精品| 无码人妻精品一区二区三| 午夜成人理论无码电影在线播放| 亚洲av午夜成人片| 国产在线精品一区二区中文| 国产精品美女一区二三区| 天堂亚洲免费视频| 伊春市| 婷婷综合亚洲| 国产成人精品午夜二三区| 国产高清在线男人的天堂| 四虎永久免费影库二三区| 亚洲激情一区二区三区视频| 视频一区二区不中文字幕|