MATLAB學習筆記1:如何快速創建多個僅有數字變化變數名?

一直以來,本人用MATLAB都是想用什麼功能就搜索什麼功能,或者查看MATLAB幫助文檔。(不得不說MATLAB的幫助文檔做得真好)

由於沒有系統學習過MATLAB,所以代碼都很水……

好吧,開個文章來記錄一下我現學現賣的MATLAB代碼,以便以後查閱。

MATLAB學習筆記1:如何快速創建多個僅有數字變化變數名?

想實現這樣一個功能,創立N個變數名,例如H1,

H2, H3, …,這裡面英文部分是沒有變化的,只有數字在依次遞增。

很久之前,我使用eval函數實現這個功能,十分複雜,而且如果變數名太多,不方便調用,並且容易出現bug。例如我在本科畢設的時候有一段代碼是這樣的:

eval([save H,num2str(l)])

此處就用到eval函數來儲存數據到不同名稱的文件里。我記得我為了實現這個功能,弄了一晚上,因為不熟悉MATLAB,需要太多debug的時間。

儘管eval函數十分強大,但是正是由於一個函數太過強大,反而需要更多的內存,CPU,以及人為的debug時間,間接降低了代碼的效率。

這裡,參考MathWorks的文檔,提供一種更高效地創建變數名措施。

如果想創建一系列變數,其中只有數字在變化,可以使用元胞數組(cell)去代替使用eval,cell數組的效率更高。

什麼是元胞數組(cell)?元胞數組是MATLAB中特有的一種數據類型,是數組的一種,其內部元素可以是屬於不同的數據類型。

例如一個元胞數組:

a = 1;b = 2;A = cell(1,6); % 創建一個1行6列的cellA={a,b,』c』,』hahaha』,233333,[1 2 3; 3 2 1]}; % Cell的賦值

那麼,

A{1}=1

A{2}=2

A{3}=c

A{4}=hahaha

A{5}=233333

A{6}=[1 2 3; 3 2 1]

也就是說,cell里可以不同類型的數據,cell的每一個元素間的類型可以完全不同。

知道了元胞數組後,我們就可以以cell來「創建多個變數名」,也就是說,用H{1}來代替H1,H{2}來代替H2,H{3}來代替H3,以此類推。代碼如下:

NumOfExp = 10;H = cell(1,NumOfExp);

這樣就創建了一個1行10列的空cell數組,可以用來儲存不同的數據、數組。

最近編寫的一個matlab代碼,用於讀取數據,將波高整合到第一行里,一開始寫完後,發現很多地方是可以用for循環+變數名的改變來簡化的,所以簡化了一下變成如下形式:

%% Part1 Combine data %%FileName = xxxx.xlsx;Sheet1 = input(Please input sheet number (1,2,3...):);currentFile = sprintf(Q%dData.mat,Sheet1);% Or using "for Sheet1 = 1:x" loop to choose sheet automatically %[number,txt,Alldata] = xlsread(FileName,Sheet1); % Read Excel filen = size(number,1);dt = 1/32;NumberOfGauge = 3;Row = cell(NumberOfGauge,1);Col = cell(NumberOfGauge,1);Gauge = cell(NumberOfGauge,1);for k=1:3[Row{k},Col{k}] = find(strncmpi(Alldata,sprintf(F00%d,k),n)); % Find the row and column of F00kGauge{k} = []; % The Gauge arrays contain final resultsj=1;for i=min(Row{k}):max(Row{k}) % Read data that belongs to Gaug{k} A{j}=number(i,:); % Use cell "A" to save array data temporarily if j>1 Gauge{k} = [Gauge{k} A{j}]; % Combine data into 1st row in Gauge{k} array elseif j==1 Gauge{k} = A{j}; end j = j+1;endsave(currentFile,Gauge);end

這個代碼就實現了使用cell數組來充當重複的變數名,並且將數據儲存起來(文件名也在變化)。

我做這些數據處理都想盡量地「自動化」想盡辦法去「偷懶」,但是又沒有悉心鑽研,沒有找到合適的方法代碼,應該還是浪費掉了不少時間的……

嗯,小白第一篇MATLAB筆記,大神們如果有更好的方法還請告知,因為使用MATLAB的次數不多,所以還沒有系統地去學習,感謝閱讀!

碎金

2018.3.1


推薦閱讀:

這是一篇值得收藏的資源乾貨文章
《捷德奧特曼魔王形態》還有什麼形態?
個體崛起的時代到來了,有一本書應該成為你的標配!
怎樣的童年才對得起孩子?(1)起跑線重要嗎?

TAG:MATLAB | 數據分析 | 學習 |