看板 MATLAB 關於我們 聯絡資訊
各位大大好,這幾天遇到很詭異的情況,一直弄不懂 懇求高手幫忙看看這是什麼問題... 我的這個程式碼是一個很大的運算、判斷功能 可是主要是這樣 原本的程式碼: 1 folder_name = 'D:\Brain\Left1~18\'; 2 side = '13~18\'; 3 folder_name = strcat(folder_name,side); 4 folder = dir(folder_name); 6 for x = 1:size(folder); 8 b2 = folder(x,1).name; 9 pic_name = strcat(folder_name,b2); 10 I = imread(pic_name); (大量運算) 2000 end (1) 1~10行都是讀檔 ,之所以會多寫幾步,是因為要批次處理整個資料夾的圖檔 所以這樣寫 (2) 2~3行是加上選擇的子資料夾、4行是將整個資料夾裡頭的檔案存到folder陣列 (3) 8~9行是將folder陣列中所儲存"裡頭圖檔的檔名",加到讀檔的位置裡pic_name (4) 10行讀完檔之後就開始大量運算 (5) 綠字部分可以無視,跟問題應該沒關 這個程式碼本來一直都沒有問題,讀檔的也一直都很OK 可是因為我想要一次跑多個資料夾 於是多加了一個for迴圈 (也嘗試了swithc、if、while) 結果卻不行!!? 程式碼變成以下這樣:(黃字部分是加的) for i = 1:2 clear floder_name;clear folder; if i == 1 folder_name = 'D:\Brain\Left1~18\'; side = '13~18\'; elseif i == 2 folder_name = 'D:\Brain\Right1~15\'; side = '11~15\'; end folder_name = strcat(folder_name,side); folder = dir(folder_name); for x = 1:size(folder); b2 = folder(x,1).name; pic_name = strcat(folder_name,b2); I = imread(pic_name); (大量運算) end end (紫色那行字我試著加,不過結果沒差) 結果就是 當迴圈的第一次,也就是i = 1的時候,是完全正常的 可是第二次會直接錯,錯在這行 ??? Index exceeds matrix dimensions. folder = dir(folder_name); 我以為是陣列大小的儲存問題,於是我加上了紫色那行,可是沒有用處 而我又做了以下三個嘗試: (1) for改成while、if、switch...之類的,不過功能一樣所以沒差 (2) 直接把folder改成folder_1、folder_2放在兩個不同的if 兩次迴圈存檔的空間(記憶體)理應完全不同 (所以不會有什麼覆蓋不覆蓋的問題了) (3) ..我忘了我改什麼了XD 總之沒用 可是一樣都是 ??? Index exceeds matrix dimensions. folder = dir(folder_name); 請問這是什麼問題? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.118.144
david5192003:我也遇到同樣問題!! 多加迴圈後 正常的程式就掛了 09/12 01:31
david5192003:跑出 Index exceeds matrix dimensions 09/12 01:31
sunev:dir 吃字串嗎? 09/12 02:00
potter1529:沒問題! 在加上跑第二次的迴圈之前 dir是完全可用的 09/12 02:55
potter1529:可是完全沒動到內部 只在外面加迴圈卻錯了 09/12 02:55
potter1529:全錯也就算了 卻是i=1可以跑 i=2出錯= = 09/12 02:55
shane:你是寫成script還是function,function內,clear在for迴圈 09/12 05:02
shane:裡面無法執行,要等到跳出function 09/12 05:03
shane:不過我不曉得你的問題出在哪,code看起來是可以的 09/12 05:03
potter1529:不是function是主程式、clear加不加都會錯 09/12 07:17
shane:你把;拿掉看看是什麼問題 09/12 22:23
potter1529:樓上你好,可以稍微講詳細一點嗎?拿掉哪裡的;呢? 09/12 22:29