<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
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 | 將元胞陣列轉換為結構體 |
注:
轉換為元胞
函數名稱 | 函數功能 |
---|---|
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'
注:
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45