matlab結構體訪問
❶ matlab如何讀取結構體中的數據,比如我想利用裡面的數據畫圖
plot(ch11.values)
結構體後面的屬性用a.x就可以得到
a是結構體變數的名字,x是它的域
當然你引用的時候要確保a有x這個域,不然會報錯
例如
ch11.scale
ch11.units
都是可以的
但是
ch11.abc就會出錯了
❷ matlab中的結構體
你賦給一個變數,那個變數就變成結構體了
結構體不能比大小
❸ matlab 中 結構體和單元的區別
1、什麼是單元陣列?
單元陣列又叫cell(元胞)陣列,以前見過「元胞數組」一詞,其實是可以理解成陣列的,比如二維數組,可以理解成2行n列的矩陣或陣列。
2、單元/元胞陣列是如何構成的呢?
我們都熟悉陣列或矩陣的構成,比如一個m*n大小的矩陣,那麼它有m行、n列,共有m*n個元素。如果我們只在實數范圍內考慮,那麼對應的每一個元素就是一個實數,這是一般的實矩陣。單元陣列也可以有m行n列,對應有m*n個元素。所不同的是單元陣列中每個元素是一個cell(元胞),而每個cell可以由不同數據格式的矩陣構成,構成每個cell的矩陣大小也可以不同,可以是一個元素,也可以是一個向量,也可以是一個多維數組。
3、如何創建一個單元陣列?
可使用cell函數創建一個空的單元陣列,具體可參考MATLAB中
help
cell內容。也可以使用大括弧創建,比如我們要創建一個1x3的單元陣列c,則c={A
sum(A)
prod(prod(A))},可以把A設為一個向量,具體各cell數據類型讀者可以用c{1}/c{2}/c{3}讀出來然後使用whos函數自己驗證。其中prod是求積,若A為一個數組(或一維向量),則一個prod後即可求出所有元素之積,第二個prod則還為原結果。若A為一個矩陣,則第一個prod後針對各列求積,結果保留為一個數組,第二個prod則對該數組所有元素再求積,那麼兩個prod的結果即為對矩陣所有元素求積。
4、什麼是結構體及其構成?
結構體可以理解為一種特殊的數據類型。一個結構體有若干結構變數或者域構成。每個結構變數/域類似於一個cell,結構變數可以由不同數據類型的數組構成,比如字元串、整型、浮點數……。此處只是可以借用cell的形式來理解結構變數,但二者絕不等同。
5、如何創建結構體?
可以使用struct函數創建結構體。我們定義結構體為str_array,
則str_array=struct('field1',val1,'field2',val2,……),其中field1、field2為域名,val1、val2為具體值。
6、單元陣列與結構體的不同之處。
結構體(也可稱為結構體陣列)中可以使用域名來訪問數據,而在單元陣列中則使用矩陣的索引操作。
❹ 怎麼樣在MATLAB中讀取結構體中的數據
簡單,使用fieldnames()函數查看有哪些成員,使用getfield()函數查看成員數據,比如:
>> a.x1 = 123;
>> a.x2 = 'a string';
>> a.x3 = [1,2,3,4,5];
>> fieldnames(a) % 返回成員名稱列表
ans =
'x1'
'x2'
'x3'
>> getfield(a,'x1') % 查看某一成員的值
ans =
123
❺ MATLAB如何提取結構體中數據
1. 結構數組的創建
MATLAB提供了兩種定義結構的方式:直接應用和使用struct函數。
a) 使用直接引用方式定義結構
與建立數值型數組一樣,建立新struct對象不需要事先申明,可以直接引用,而且可以動態擴充。比如建立一個復數變數x:
x.real = 0; % 創建欄位名為real,並為該欄位賦值為0
x.imag = 0 % 為x創建一個新的欄位imag,並為該欄位賦值為0
x =
real: 0
imag: 0
然後可以將其動態擴充為數組:
x(2).real = 0; % 將x擴充為1×2的結構數組
x(2).imag = 0;
在任何需要的時候,也可以為數組動態擴充欄位,如增加欄位scale:
x(1).scale = 0;
這樣,所有x都增加了一個scale欄位,而x(1)之外的其他變數的scale欄位為空:
x(1) % 查看結構數組的第一個元素的各個欄位的內容
ans =
real: 0
imag: 0
scale: 0
x(2) % 查看結構數組的第二個元素的各個欄位的內容,注意沒有賦值的欄位為空
ans =
real: 0
imag: 0
scale: []
應該注意的是,x的real、imag、scale欄位不一定是單個數據元素,它們可以是任意數據類型,可以是向量、數組、矩陣甚至是其他結構變數或元胞數組,而且不同欄位之間其數據類型不需要相同。例如:
clear x; x.real = [1 2 3 4 5]; x.imag = ones(10,10);
數組中不同元素的同一欄位的數據類型也不要求一樣:
x(2).real = '123';
x(2).imag = rand(5,1);
甚至還可以通過引用數組欄位來定義結構數據類型的某欄位:
x(3).real = x(1); x(3).imag = 3;
x(3)
ans =
real: [1x1 struct]
imag: 3
b) 使用struct函數創建結構
使用struct函數也可以創建結構,該函數產生或把其他形式的數據轉換為結構數組。
struct的使用格式為:
s = sturct('field1',values1,'field2',values2,…);
該函數將生成一個具有指定欄位名和相應數據的結構數組,其包含的數據values1、values2等必須為具有相同維數的數據,數據的存放位置與其他結構位置一一對應的。
對於struct的賦值用到了元胞數組。數組values1、values2等可以是元胞數組、標量元胞單元或者單個數值。每個values的數據被賦值給相應的field欄位。
當valuesX為元胞數組的時候,生成的結構數組的維數與元胞數組的維數相同。而在數據中不包含元胞的時候,得到的結構數組的維數是1×1的。例如:
s = struct('type',{'big','little'},'color',{'blue','red'},'x',{3,4})
s =
1x2 struct array with fields:
type
color
x
得到維數為1×2的結構數組s,包含了type、color和x共3個欄位。這是因為在struct函數中{'big','little'}、{'blue','red'}和{3,4}都是1×2的元胞數組,可以看到兩個數據成分分別為:
s(1,1)
ans =
type: 'big'
color: 'blue'
x: 3
s(1,2)
ans =
type: 'little'
color: 'red'
x: 4
相應的,如果將struct函數寫成下面的形式:
s = struct('type',{'big';'little'},'color',{'blue';'red'},'x',{3;4})
s =
2x1 struct array with fields:
type
color
x
則會得到一個2×1的結構數組。
2. 結構數組的操作
MATLAB中專門用於對結構數組的操作的函數並不多,通過help datatypes獲取數據類型列表,可以看到其中的結構數據類型的有關的函數。
結構數組的操作函數
deal把輸入處理成輸出
Fieldnames獲取結構的欄位名
getfield獲取結構中指定欄位的值
Rmfield刪除結構的欄位(不是欄位內容)
setfield設置結構數組中指定的欄位的值
Struct創建結構數組
struct2cell結構數組轉化成元胞數組
Isfield判斷是否存在該欄位
isstruct判斷某變數是否是結構類型
❻ 關於matlab結構體訪問()和{}的區別問題
這里涉及到單元陣列的索引方式
單元陣列的表示有兩種方式,一種是內容索引,一種是單元索引。
內容索引要用到大括弧{},還有他們的下標,例如樓主的N{1,2}屬於內容索引。
內容索引的這種類型定義了包含在一個單元中的數據結構的內容。
單元索引則是把存儲於單元中的數據用大括弧括起來,單元的下標用普通下標標記法。例如N(1,2)。
單元索引的這種類型創建了包含有指定值的一個數據結構,並把這個數據結構賦於一個單元。
他們的區別在於你直接定義並給單元陣列賦值時的形式,比如:
內容索引:
N{1,1}=[1 2 ;4 5];
N{1,2} = 'Name';
N{2,1} = 2-4i;
N{2,2} = 7;
對應的單元索引形式:
N(1,1)={[1 2;4 5]};
N(1,2)={'Name'};
N(2,1)={2-4i};
N(2,2)={7};
關於樓主的第二個問題:
因為cc=N(1,2)是單元索引形式,所以cc是一個單元類型,其所佔內存空間不僅要存入數據的數值,還要指定數據的數據類型,而且單元陣列不像矩陣或者數組在MATLAB中有特定的存儲結構,這就是導致cc佔用空間這么大的原因,至於68Bytes怎麼得來的,這個確實不知道。
期待有MATLAB大師來解答。
期待樓主加分哦,很努力了,O(∩_∩)O~
❼ matlab中怎麼定義結構體
1.
使用直接引用方式定義結構
與建立數值型數組一樣,建立新struct對象不需要事先申明,可以直接引用,而且可以動態擴充。比如建立一個復數變數x:
x.real
=
0;
%
創建欄位名為real,並為該欄位賦值為0
x.imag
=
0
%
為x創建一個新的欄位imag,並為該欄位賦值為0
x
=
real:
0
imag:
0
2.
使用struct函數創建結構
使用struct函數也可以創建結構,該函數產生或吧其他形式的數據轉換為結構數組。
struct的使用格式為:
s
=
sturct('field1',values1,'field2',values2,…);