您好,登錄后才能下訂單哦!
本篇內容介紹了“在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
不熟悉的數據操作熟悉一下。
最后準備附上Numpy
中對兩者之間基本操作的比較。
2.1 數據變量的創建
double
是Matlab
的默認數據類型,基本上可以滿足大部分的計算任務。single和double
的創建方式一致
%% 創建數組 x = 10; Y = double(x); % 轉換為double型數組 y = 10; %% 查看數據類型 class(Y)
2.2 查看數據類型和值
函數名稱 | 函數功能 |
---|---|
isinteger | 確定輸入是否為整數數組 |
isfloat | 確定輸入是否為浮點數組 |
isnumeric | 確定輸入是否為數值數組 |
isnan | 確定那些數組為NaN |
class | 查看數據類型 |
注:以上函數的返回值均為0(結果為假)或1(結果為真)
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 字符串數組的訪問
按照數組訪問的方式對字符串進行訪問,可通過下標的方式對數組進行切片和訪問。
結構體數組是使用名為字段的數據容器將相關數據組合在一起的數據類型。每個字段都可以包含任意類型的數據。可以使用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'}
注:創建多個字段的結構體時value2
和 value3
的元胞數組是 1×2 數組,因此 s
也是 1×2 數組。因為 value1
是數值數組而不是元胞數組,所以 s(1).f1
和 s(2).f1
具有相同的內容。
類似地,因為 value4
的元胞數組具有單一元素,所以 s(1).f4
和 s(2).f4
具有相同的內容。
4.2 結構體中的函數
函數名稱 | 函數功能 |
---|---|
struct | 創建按結構體數組 |
fieldnames | 結構體的字段名稱 |
getfield | 胡哦去結構體數組字段 |
isfield | 確定輸入是否為結構體數組字段 |
orderfields | 結構體數組的字段順序 |
rmfield | 刪除結構體中的字段 |
setfield | 為結構體數組字段賦值 |
table2struct | 將表轉換為結構體數組 |
struct2table | 將結構體數組轉換為表 |
cell2struct | 將元胞數組轉換為結構體數組 |
struct2cell | 將結構體轉換為元胞數組 |
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中怎么創建類似字典的數據結構”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。