在matlab中創(chuàng)建類似字典的數(shù)據(jù)結(jié)構(gòu)方式
matlab中創(chuàng)建類似字典的數(shù)據(jù)結(jié)構(gòu)
Matlab中創(chuàng)建struct:
d = struct('a','1','b','2')在Matlab中通過(guò)字符串形式的fieldname來(lái)查找value(Using Dynamic FielNames):
d.('a')
d.('b')在Matlab中修改已經(jīng)存在的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基本數(shù)據(jù)結(jié)構(gòu)說(shuō)明
Matlab作為早期的科研軟件之一,對(duì)數(shù)據(jù)的處理有強(qiáng)大的功能。最近需要做信號(hào)處理相關(guān)的部分,將之前對(duì)Matlab不熟悉的數(shù)據(jù)操作熟悉一下。
最后準(zhǔn)備附上Numpy中對(duì)兩者之間基本操作的比較。
1、基本數(shù)據(jù)結(jié)構(gòu)總覽(僅含常用類型)

2、數(shù)值類型基本操作
2.1 數(shù)據(jù)變量的創(chuàng)建
double是Matlab的默認(rèn)數(shù)據(jù)類型,基本上可以滿足大部分的計(jì)算任務(wù)。single和double的創(chuàng)建方式一致
%% 創(chuàng)建數(shù)組 x = 10; Y = double(x); % 轉(zhuǎn)換為double型數(shù)組 y = 10; %% 查看數(shù)據(jù)類型 class(Y)
2.2 查看數(shù)據(jù)類型和值
| 函數(shù)名稱 | 函數(shù)功能 |
|---|---|
| isinteger | 確定輸入是否為整數(shù)數(shù)組 |
| isfloat | 確定輸入是否為浮點(diǎn)數(shù)組 |
| isnumeric | 確定輸入是否為數(shù)值數(shù)組 |
| isnan | 確定那些數(shù)組為NaN |
| class | 查看數(shù)據(jù)類型 |
注:以上函數(shù)的返回值均為0(結(jié)果為假)或1(結(jié)果為真)
3、字符和字符串
3.1 字符串創(chuàng)建
% 創(chuàng)建字符串
str = "Hello, world"
>>> str =
"Hello, world"
% 創(chuàng)建字符串?dāng)?shù)組
str = ["Mercury" "Gemini" "Apollo";
"Skylab" "Skylab B" "ISS"]
>>> str = 2x3 string
"Mercury" "Gemini" "Apollo"
"Skylab" "Skylab B" "ISS"
% 傳入?yún)?shù)轉(zhuǎn)換為字符串?dāng)?shù)組
str = string(A) % 將輸入的數(shù)組轉(zhuǎn)換為字符串?dāng)?shù)組
str = string(A, datetFmt) % 將傳入的A轉(zhuǎn)換指定的時(shí)間格式,所以傳入的A是datetime或者duration
A的輸入格式?jīng)Q定了如何將A轉(zhuǎn)換字符串?dāng)?shù)組
| 輸入類型 | 轉(zhuǎn)換說(shuō)明 | 示例輸入 | 示例輸出 |
|---|---|---|---|
| char | 每一行變?yōu)樽址囊粋€(gè)標(biāo)量 | 1×3 char array 'foo' | 1×1 string array "foo" |
| cell | 元胞數(shù)組的每一個(gè)元素都轉(zhuǎn)換為1 * 1的字符串 | {137,'foo'} | ["137" "foo"] |
| 數(shù)值數(shù)組 | 相當(dāng)于compose的%g格式 | [137 3.1e-3 8.5e-6] | ["137" "0.0031" "8.5e-06"] |
| datetime | 要指定格式和區(qū)域設(shè)置 | datetime(2020,6,1) | "01-Jun-2020" |
| 邏輯數(shù)組 | logical 函數(shù)不接受字符串輸入,因此轉(zhuǎn)換是單向的。 | logical([0 1]) | ["false" "true"] |
注:在matlab中要區(qū)分字符和字符串的差異。
示例:
% 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
% 通過(guò)strlength可求的str中字符串的長(zhǎng)度
n = strlength(str)
>>> n = 30
% 轉(zhuǎn)換元胞數(shù)組
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"
% 轉(zhuǎn)換表示數(shù)字的字符串
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可以刪除字符串中的指定符號(hào)
2、str2double適用于輸入?yún)?shù)可能是字符串?dāng)?shù)組、字符向量或字符向量元胞數(shù)組,本質(zhì)上說(shuō)明str2double對(duì)字符串的轉(zhuǎn)換有更加廣泛的適用
3.2 字符串?dāng)?shù)組的訪問(wèn)
按照數(shù)組訪問(wèn)的方式對(duì)字符串進(jìn)行訪問(wèn),可通過(guò)下標(biāo)的方式對(duì)數(shù)組進(jìn)行切片和訪問(wèn)。
4、結(jié)構(gòu)體
結(jié)構(gòu)體數(shù)組是使用名為字段的數(shù)據(jù)容器將相關(guān)數(shù)據(jù)組合在一起的數(shù)據(jù)類型。每個(gè)字段都可以包含任意類型的數(shù)據(jù)??梢允褂?code>structName.fieldName 格式的圓點(diǎn)表示法來(lái)訪問(wèn)字段中的數(shù)據(jù)。
形式上和Python的字典的創(chuàng)建方式類似。但是數(shù)組的維度取決于對(duì)應(yīng)值的形式,通過(guò)字段名的方式對(duì)相應(yīng)的value進(jìn)行訪問(wèn)。
4.1 創(chuàng)建結(jié)構(gòu)體
%% 創(chuàng)建一個(gè)字段的結(jié)構(gòu)體
field = 'f';
value = {'some text';
[10, 20, 30];
magic(5)};
s = struct(field,value)
% 查看每個(gè)元素在內(nèi)容
>>> 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
%% 創(chuàng)建多個(gè)字段的結(jié)構(gòu)體
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
% 輸出上述字段的結(jié)果
>>> 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'
%% 創(chuàng)建空字段的結(jié)構(gòu)體
s = struct('f1','a','f2',[])
>>> s = struct with fields:
f1: 'a'
f2: []
%% 創(chuàng)建包含元胞數(shù)組的字段
field = 'mycell';
value = {{'a','b','c'}};
s = struct(field,value)
>>> s = struct with fields:
mycell: {'a' 'b' 'c'}
注:創(chuàng)建多個(gè)字段的結(jié)構(gòu)體時(shí)value2 和 value3 的元胞數(shù)組是 1×2 數(shù)組,因此 s 也是 1×2 數(shù)組。因?yàn)?value1 是數(shù)值數(shù)組而不是元胞數(shù)組,所以 s(1).f1 和 s(2).f1 具有相同的內(nèi)容。
類似地,因?yàn)?value4 的元胞數(shù)組具有單一元素,所以 s(1).f4 和 s(2).f4 具有相同的內(nèi)容。
4.2 結(jié)構(gòu)體中的函數(shù)
| 函數(shù)名稱 | 函數(shù)功能 |
|---|---|
| struct | 創(chuàng)建按結(jié)構(gòu)體數(shù)組 |
| fieldnames | 結(jié)構(gòu)體的字段名稱 |
| getfield | 胡哦去結(jié)構(gòu)體數(shù)組字段 |
| isfield | 確定輸入是否為結(jié)構(gòu)體數(shù)組字段 |
| orderfields | 結(jié)構(gòu)體數(shù)組的字段順序 |
| rmfield | 刪除結(jié)構(gòu)體中的字段 |
| setfield | 為結(jié)構(gòu)體數(shù)組字段賦值 |
| table2struct | 將表轉(zhuǎn)換為結(jié)構(gòu)體數(shù)組 |
| struct2table | 將結(jié)構(gòu)體數(shù)組轉(zhuǎn)換為表 |
| cell2struct | 將元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)體數(shù)組 |
| struct2cell | 將結(jié)構(gòu)體轉(zhuǎn)換為元胞數(shù)組 |
5 元胞數(shù)組
5.1 創(chuàng)建與訪問(wèn)
創(chuàng)建空字符串
a = cell()
a = {}
5.2 轉(zhuǎn)換和檢查數(shù)據(jù)類型
從元胞轉(zhuǎn)換
| 函數(shù)名稱 | 函數(shù)功能 |
|---|---|
| cell2mat | 將元胞數(shù)組轉(zhuǎn)換為普通數(shù)組 |
| cell2struct | 將元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)體 |
注:
- 元胞數(shù)組中的結(jié)構(gòu)體轉(zhuǎn)換為結(jié)構(gòu)體數(shù)組時(shí),結(jié)構(gòu)體必須包含相同的字段(結(jié)構(gòu)體的類型有點(diǎn)像Python中的鍵值的方式,只是訪問(wèn)的方式不同)
轉(zhuǎn)換為元胞
| 函數(shù)名稱 | 函數(shù)功能 |
|---|---|
| cellstr | 將字符向量轉(zhuǎn)變?yōu)樵麛?shù)組 |
| mat2cell | 將數(shù)組轉(zhuǎn)換包含子數(shù)組的元胞數(shù)組.原始數(shù)組可通過(guò)參數(shù)dimNDist劃分為更小的數(shù)組。 |
| num2cell | 將數(shù)組轉(zhuǎn)換為相同大小的元胞數(shù)組 |
| struct2cell | 將結(jié)構(gòu)體轉(zhuǎn)換為元胞數(shù)組 |
| table2cell | 將表轉(zhuǎn)換為元胞數(shù)組。元胞數(shù)組中不含字段名稱。通過(guò)fieldnames函數(shù)可以得到原始結(jié)構(gòu)體的字段名稱 |
5.3 元胞數(shù)組的操作
將元胞添加到元胞數(shù)組
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]}對(duì)元胞數(shù)組的訪問(wèn)
- 對(duì)元胞切片用圓括號(hào)()來(lái)訪問(wèn)
- 使用花括號(hào){}對(duì)特定的內(nèi)容進(jìn)行訪問(wèn)
C = {'one', 'twC=2×3 cell array
>>> C=2×3 cell array
{'one'} {'two'} {'three'}
{[ 1]} {[ 2]} {[ 3]} 通過(guò)()切片
upperLeft = C(1:2,1:2)
>>> upperLeft=2×2 cell array
{'one'} {'two'}
{[ 1]} {[ 2]}通過(guò)切片修改值
% 修改第1行 1,2,3列的值
C(1,1:3) = {'first','second','third'}
>>> C=2×3 cell array
{'first'} {'second'} {'third'}
{[ 1]} {[ 2]} {[ 3]}將元胞中的數(shù)值數(shù)據(jù)抓換為數(shù)值數(shù)組
numericCells = C(2,1:3)
>>> numericCells=1×3 cell array
{[1]} {[2]} {[3]}
numericVector = cell2mat(numericCells)
>>> numericVector = 1×3
1 2 3通過(guò){}對(duì)元胞的特定內(nèi)容訪問(wèn) / 或者修改特定內(nèi)容的值
% 訪問(wèn)元胞的值
last = C{2,3}
>>> last = 3
C{2,3} = 300
>>> C=2×3 cell array
{'first'} {'second'} {'third'}
{[ 1]} {[ 2]} {[ 300]}訪問(wèn)某一行的值并保存到數(shù)值數(shù)組中
% 訪問(wèn)數(shù)組中某一行的值并轉(zhuǎn)換為數(shù)值數(shù)組
nums = [C{2,:}]
>>> nums = 1×3
1 2 300訪問(wèn)元胞的多級(jí)索引
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 }
% 訪問(wèn)元胞的內(nèi)容
C{1,2}
>>> ans = 1×3
100 200 300
c{1, 2}(1, 2)
>>> ans = 2
C{2,1}{1,2}
>>> ans = 'two'注:
- 將元胞添加到元胞數(shù)組內(nèi),如果當(dāng)前的索引不存在,會(huì)自動(dòng)對(duì)當(dāng)前的數(shù)組擴(kuò)容,不存在的用空元胞來(lái)代替
- 通過(guò)追加索引,并使用與內(nèi)容的數(shù)據(jù)類型匹配的語(yǔ)法,來(lái)訪問(wèn)元胞的部分內(nèi)容。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python3爬蟲(chóng)關(guān)于識(shí)別檢驗(yàn)滑動(dòng)驗(yàn)證碼的實(shí)例
在本篇內(nèi)容里小編給大家分享了關(guān)于Python3爬蟲(chóng)關(guān)于識(shí)別檢驗(yàn)滑動(dòng)驗(yàn)證碼的實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-07-07
python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5窗口布局控件QStackedWidget詳細(xì)使用方法
這篇文章主要介紹了python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5窗口布局控件QStackedWidget詳細(xì)使用方法,需要的朋友可以參考下2020-02-02
Python報(bào)mongod:?error?while?loading?shared?libraries:?l
這篇文章主要介紹的是Python報(bào)mongod:?error?while?loading?shared?libraries:?libcrypto.so.1.1的解決方法,下面文章解決過(guò)程,需要的小伙伴可以參考一下2022-02-02
Tensorflow加載Vgg預(yù)訓(xùn)練模型操作
這篇文章主要介紹了Tensorflow加載Vgg預(yù)訓(xùn)練模型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
Python連接數(shù)據(jù)庫(kù)并批量插入包含日期記錄的操作
這篇文章主要介紹了Python連接數(shù)據(jù)庫(kù)并批量插入包含日期記錄的操作,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
Python開(kāi)發(fā)之利用re模塊去除代碼塊注釋
Python的re模塊主要是正則表達(dá)式的操作函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python開(kāi)發(fā)之利用re模塊去除代碼塊注釋的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
Python3的高階函數(shù)map,reduce,filter的示例詳解
這篇文章主要介紹了Python3的高階函數(shù)map,reduce,filter的示例代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07

