中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在matlab中怎么創建類似字典的數據結構

發布時間:2023-03-25 17:24:40 來源:億速云 閱讀:119 作者:iii 欄目:開發技術

本篇內容介紹了“在matlab中怎么創建類似字典的數據結構”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    matlab中創建類似字典的數據結構

    Matlab中創建struct:

    d = struct('a','1','b','2')

    在Matlab中通過字符串形式的fieldname來查找value(Using Dynamic FielNames):

    d.('a')
    d.('b')

    在Matlab中修改已經存在的field的value:

    d.('b')='9'

    在Matlab中添加新的field:

    d.('c')='3'

    在Matlab中刪除stuct的field:

    d=struct('b', '9','c', '3', 'a', '1')
    d=rmfield(b,'9')

    在Matlab中刪除struct所有field:

    d=struct()

    matlab基本數據結構說明

    Matlab作為早期的科研軟件之一,對數據的處理有強大的功能。最近需要做信號處理相關的部分,將之前對Matlab不熟悉的數據操作熟悉一下。

    最后準備附上Numpy中對兩者之間基本操作的比較。

    1、基本數據結構總覽(僅含常用類型)

    在matlab中怎么創建類似字典的數據結構

    2、數值類型基本操作

    2.1 數據變量的創建

    doubleMatlab的默認數據類型,基本上可以滿足大部分的計算任務。single和double的創建方式一致

    %% 創建數組
    x = 10;
    Y = double(x);  % 轉換為double型數組
    y = 10;
    
    %% 查看數據類型
    class(Y)

    2.2 查看數據類型和值

    函數名稱函數功能
    isinteger確定輸入是否為整數數組
    isfloat確定輸入是否為浮點數組
    isnumeric確定輸入是否為數值數組
    isnan確定那些數組為NaN
    class查看數據類型

    注:以上函數的返回值均為0(結果為假)或1(結果為真)

    3、字符和字符串

    3.1 字符串創建

    % 創建字符串
    str = "Hello, world"
    >>> str = 
    "Hello, world"
    
    % 創建字符串數組
    str = ["Mercury" "Gemini" "Apollo";
           "Skylab" "Skylab B" "ISS"]
           
    >>> str = 2x3 string
        "Mercury"    "Gemini"      "Apollo"
        "Skylab"     "Skylab B"    "ISS" 
      
    % 傳入參數轉換為字符串數組
    str = string(A)   % 將輸入的數組轉換為字符串數組
    str = string(A, datetFmt)   % 將傳入的A轉換指定的時間格式,所以傳入的A是datetime或者duration

    A的輸入格式決定了如何將A轉換字符串數組

    輸入類型轉換說明示例輸入示例輸出
    char每一行變為字符串的一個標量1×3 char array 'foo'1×1 string array "foo"
    cell元胞數組的每一個元素都轉換為1 * 1的字符串{137,'foo'}["137" "foo"]
    數值數組相當于compose的%g格式[137 3.1e-3 8.5e-6]["137" "0.0031" "8.5e-06"]
    datetime要指定格式和區域設置datetime(2020,6,1)"01-Jun-2020"
    邏輯數組logical 函數不接受字符串輸入,因此轉換是單向的。logical([0 1])["false" "true"]

    注:在matlab中要區分字符和字符串的差異。

    示例:

    % A表示的是字符向量
    A = 'Four score and seven years ago'
    c = size(A)   
    >>> c = 1×2
    
         1    30
    str = string(A)
    s = size(str)
    >>> s = 1×2
    
         1     1
    % 通過strlength可求的str中字符串的長度
    n = strlength(str)
    >>> n = 30
    
    
    % 轉換元胞數組
    A = {'Mercury','Gemini','Apollo';...
         'Skylab','Skylab B','ISS'}
    >>> A = 2x3 cell
        {'Mercury'}    {'Gemini'  }    {'Apollo'}
        {'Skylab' }    {'Skylab B'}    {'ISS'   }
    str = string(A)
    >>> str = 2x3 string
        "Mercury"    "Gemini"      "Apollo"
        "Skylab"     "Skylab B"    "ISS" 
        
    % 轉換表示數字的字符串
    str = ["256","3.1416","8.9e-3"]
    >>> str = 1x3 string
        "256"    "3.1416"    "8.9e-3"
    X = double(str)
    >>> X = 1×3
    
      256.0000    3.1416    0.0089
    Y = str2double(str)
    >>>Y = 1×3
    
      256.0000    3.1416    0.0089

    注:

    1、erase可以刪除字符串中的指定符號

    2、str2double適用于輸入參數可能是字符串數組、字符向量或字符向量元胞數組,本質上說明str2double對字符串的轉換有更加廣泛的適用

    3.2 字符串數組的訪問

    按照數組訪問的方式對字符串進行訪問,可通過下標的方式對數組進行切片和訪問。

    4、結構體

    結構體數組是使用名為字段的數據容器將相關數據組合在一起的數據類型。每個字段都可以包含任意類型的數據。可以使用structName.fieldName 格式的圓點表示法來訪問字段中的數據。

    形式上和Python的字典的創建方式類似。但是數組的維度取決于對應值的形式,通過字段名的方式對相應的value進行訪問。

    4.1 創建結構體

    %% 創建一個字段的結構體
    field = 'f';
    value = {'some text';
             [10, 20, 30];
             magic(5)};
    s = struct(field,value)
    
    % 查看每個元素在內容
    >>> ans = 
    'some text'
    ans = 1×3
    
        10    20    30
    
    ans = 5×5
    
        17    24     1     8    15
        23     5     7    14    16
         4     6    13    20    22
        10    12    19    21     3
        11    18    25     2     9
    
    %% 創建多個字段的結構體
    field1 = 'f1';  value1 = zeros(1,10);
    field2 = 'f2';  value2 = {'a', 'b'};
    field3 = 'f3';  value3 = {pi, pi.^2};
    field4 = 'f4';  value4 = {'fourth'};
    
    s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
    >>> s=1×2 struct array with fields:
        f1
        f2
        f3
        f4
    % 輸出上述字段的結果
    >>> s(1)
    ans = struct with fields:
        f1: [0 0 0 0 0 0 0 0 0 0]
        f2: 'a'
        f3: 3.1416
        f4: 'fourth'
    >>> s(2)
    ans = struct with fields:
        f1: [0 0 0 0 0 0 0 0 0 0]
        f2: 'b'
        f3: 9.8696
        f4: 'fourth'
    
    %% 創建空字段的結構體
    s = struct('f1','a','f2',[])
    >>> s = struct with fields:
        f1: 'a'
        f2: []
    %% 創建包含元胞數組的字段
    field = 'mycell';
    value = {{'a','b','c'}};
    s = struct(field,value)
    >>> s = struct with fields:
        mycell: {'a'  'b'  'c'}

    注:創建多個字段的結構體時value2value3 的元胞數組是 1×2 數組,因此 s 也是 1×2 數組。因為 value1 是數值數組而不是元胞數組,所以 s(1).f1s(2).f1 具有相同的內容。

    類似地,因為 value4 的元胞數組具有單一元素,所以 s(1).f4s(2).f4 具有相同的內容。

    4.2 結構體中的函數

    函數名稱函數功能
    struct創建按結構體數組
    fieldnames結構體的字段名稱
    getfield胡哦去結構體數組字段
    isfield確定輸入是否為結構體數組字段
    orderfields結構體數組的字段順序
    rmfield刪除結構體中的字段
    setfield為結構體數組字段賦值
    table2struct將表轉換為結構體數組
    struct2table將結構體數組轉換為表
    cell2struct將元胞數組轉換為結構體數組
    struct2cell將結構體轉換為元胞數組

    5 元胞數組

    5.1 創建與訪問

    創建空字符串

    a = cell()
    a = {}

    5.2 轉換和檢查數據類型

    從元胞轉換

    函數名稱函數功能
    cell2mat將元胞數組轉換為普通數組
    cell2struct將元胞數組轉換為結構體


    注:

    • 元胞數組中的結構體轉換為結構體數組時,結構體必須包含相同的字段(結構體的類型有點像Python中的鍵值的方式,只是訪問的方式不同)

    轉換為元胞

    函數名稱函數功能
    cellstr將字符向量轉變為元胞數組
    mat2cell將數組轉換包含子數組的元胞數組.原始數組可通過參數dimNDist劃分為更小的數組。
    num2cell將數組轉換為相同大小的元胞數組
    struct2cell將結構體轉換為元胞數組
    table2cell將表轉換為元胞數組。元胞數組中不含字段名稱。通過fieldnames函數可以得到原始結構體的字段名稱

    5.3 元胞數組的操作

    將元胞添加到元胞數組

    C = {1, 2, 3}
    >>> C=1×3 cell array
        {[1]}    {[2]}    {[3]}
    
    C{4,4} = 44
    >>> C=4×4 cell array
        {[       1]}    {[       2]}    {[       3]}    {0x0 double}
        {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}
        {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}
        {0x0 double}    {0x0 double}    {0x0 double}    {[      44]}

    對元胞數組的訪問

    • 對元胞切片用圓括號()來訪問

    • 使用花括號{}對特定的內容進行訪問

    C = {'one', 'twC=2×3 cell array
        
    >>> C=2×3 cell array
        {'one'}    {'two'}    {'three'}
        {[  1]}    {[  2]}    {[    3]}

    通過()切片

    upperLeft = C(1:2,1:2)
    >>> upperLeft=2×2 cell array
        {'one'}    {'two'}
        {[  1]}    {[  2]}

    通過切片修改值

    % 修改第1行 1,2,3列的值
    C(1,1:3) = {'first','second','third'}
    >>> C=2×3 cell array
        {'first'}    {'second'}    {'third'}
        {[    1]}    {[     2]}    {[    3]}

    將元胞中的數值數據抓換為數值數組

    numericCells = C(2,1:3)
    >>> numericCells=1×3 cell array
        {[1]}    {[2]}    {[3]}
        
    numericVector = cell2mat(numericCells)
    >>> numericVector = 1×3
    
         1     2     3

    通過{}對元胞的特定內容訪問 / 或者修改特定內容的值

    % 訪問元胞的值
    last = C{2,3}
    >>> last = 3
    
    C{2,3} = 300
    >>> C=2×3 cell array
        {'first'}    {'second'}    {'third'}
        {[    1]}    {[     2]}    {[  300]}

    訪問某一行的值并保存到數值數組中

    % 訪問數組中某一行的值并轉換為數值數組
    nums = [C{2,:}]
    >>> nums = 1×3
    
         1     2   300

    訪問元胞的多級索引

    myNum = [1, 2, 3];
    myCell = {'one', 'two'};
    myStruct.Field1 = ones(3);
    myStruct.Field2 = 5*ones(5);
    
    C = {myNum, 100*myNum;
         myCell, myStruct}
         
    >>> C=2×2 cell array
        {[ 1 2 3]}    {[100 200 300]}
        {1x2 cell}    {1x1 struct   }
        
    % 訪問元胞的內容
    C{1,2}
    >>> ans = 1×3
    
       100   200   300
      
    c{1, 2}(1, 2)
    >>> ans = 2
    
    C{2,1}{1,2}
    >>> ans = 'two'

    注:

    • 將元胞添加到元胞數組內,如果當前的索引不存在,會自動對當前的數組擴容,不存在的用空元胞來代替

    • 通過追加索引,并使用與內容的數據類型匹配的語法,來訪問元胞的部分內容。

    “在matlab中怎么創建類似字典的數據結構”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    潞城市| 华亭县| 淮阳县| 枝江市| 开阳县| 专栏| 平南县| 宁强县| 邯郸市| 田阳县| 三河市| 浏阳市| 集安市| 马关县| 金山区| 和硕县| 长宁县| 宁河县| 黄浦区| 都昌县| 新化县| 泰安市| 资兴市| 莱州市| 金溪县| 高淳县| 延边| 福泉市| 大冶市| 宝清县| 乌拉特中旗| 漳州市| 盐山县| 眉山市| 青浦区| 广安市| 河曲县| 巫山县| 正镶白旗| 和平县| 赤峰市|