我是一名Matlab初學者,至今未能找到答案。您的幫助一定會非常感激。在MATLAB中使用部分變量名創建一個循環
我有70個矩陣(100x100),命名爲SUBJ_1,SUBJ_2等。我想創建一個循環,以便爲每個矩陣計算一些指標(即最大值和最小值),並將輸出保存爲70x2結果矩陣(其中每行將對應於連續命名的SUBJ_矩陣)。
我在這兩個階段都掙扎 - 如何在'for'循環中使用各個變量的名稱以及如何正確地將各個輸出保存在組合數組中。
非常感謝,一切順利!
我是一名Matlab初學者,至今未能找到答案。您的幫助一定會非常感激。在MATLAB中使用部分變量名創建一個循環
我有70個矩陣(100x100),命名爲SUBJ_1,SUBJ_2等。我想創建一個循環,以便爲每個矩陣計算一些指標(即最大值和最小值),並將輸出保存爲70x2結果矩陣(其中每行將對應於連續命名的SUBJ_矩陣)。
我在這兩個階段都掙扎 - 如何在'for'循環中使用各個變量的名稱以及如何正確地將各個輸出保存在組合數組中。
非常感謝,一切順利!
至於如何在「for」循環,這裏舉了一個例子使用單獨的變量的名稱:
SUBJ = [];
for idx = 1:70
term = eval(['SUBJ_',num2str(idx)]);
SUBJ = [SUBJ; max(max(term)),min(min(term))];
end
儘管這在Matlab中原則上是可行的,但我不會推薦它:太慢而且實施起來很麻煩。
你可以改爲使用一個3-D矩陣(100x100x70)SUBJ
,它將包含所有的SUBJ_1
等在一個矩陣。這可以讓你用一行代碼來計算最小/最大值等。 MATLAB會照顧循環的內部:
OUTPUT(:,1) = min(min(SUBJ,[],1)[],2);
OUTPUT(:,2) = max(max(SUBJ,[],1)[],2);
這樣,OUTPUT(1,1)
包含min(min(SUBJ(:,:,1)))
等等...
大矩陣比單元陣列更好,但代碼不正確。 'ALLMINS = min(min(SUBJ,[],1)[],2);'會產生正確的結果。 – Daniel 2014-09-01 08:48:19
@丹尼爾,謝謝你 - 沒有MATLAB打開和太久,因爲我用了很多: -/ – 2014-09-01 08:50:14
你好!非常感謝您的建議。雖然這對於這個特定的(第一個)任務來說是實用的,但在我的數據處理的後期階段,我仍然需要以某種方式通過對應於各個主題的數組創建循環。我將需要運行一些以前準備好的腳本,這些腳本的數組需要保持其原始大小。因此,它是否仍然有可能通過基於主題名稱的單個數組創建一個循環?謝謝! – rochned 2014-09-01 08:51:55
不要使用這樣的變量名,創建一個名爲SUBJ
一個大單元陣列,把每個矩陣在裏面。
r=zeros(numel(SUBJ),2)
for idx=1:numel(SUBJ)
r(idx,1)=min(min(SUBJ{idx}))
r(idx,2)=max(max(SUBJ{idx}))
end
min
和max
被稱爲兩次,因爲第一次調用創建的行,列中第二個電話中最大。
包含矩陣的單元陣列也可以工作,但我認爲它比我在解決方案中給出的3d矩陣慢。儘管所有70個矩陣不必是相同的大小,但它具有優勢。 – 2014-09-01 08:51:20
[見相關答案】(http://stackoverflow.com/a/25378067/ 3372061)。 'eval(sprintf(...))'是你想要的代碼/解決方法/破解,但是請注意開頭的警告(類似於[Daniel](http://stackoverflow.com/a/25602011/) 3372061)和[Jonas](http://stackoverflow.com/a/25601997/3372061)中提到)。 – 2014-09-01 09:06:14