看板 MATLAB 關於我們 聯絡資訊
: 結果就是 : 當迴圈的第一次,也就是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); : 請問這是什麼問題?
shane:不過我不曉得你的問題出在哪,code看起來是可以的
我剛剛測試,把程式碼給實際測試一遍,驚訝的發現 for i = 1:2 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 發現 把綠色括號給去掉就可以執行了囧 當然綠色括號裡面包含了一兩千行的東西, 所以光這樣去掉實在沒什麼意義啦... 可是我還是不瞭解,為什麼可以執行的程式 最外圍加上一個迴圈跑兩次,就會錯了呢? 不能執行的錯也就算了, 跑第一次一定對,跑第二次一定錯是什麼情況啊.............. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.118.144
doom8199:嘗試把 (大量運算) 寫成一個 function, 或是養成習慣 09/19 20:54
doom8199:把用完無 reuse 的 data clear 掉 09/19 20:55
doom8199:bug 有很多種,例如變數 i or x 在(大量運算) 裡重複出現 09/19 20:56
doom8199:或是原po使用了會讓 matlab 誤判的變數名稱 (ex: size) 09/19 20:58
potter1529:嗯..當然有可能是那樣沒錯 可是程式裡面我"只"加了一個 09/20 20:16
potter1529:框住所有內容的迴圈 也就只是讓它從一次變兩次這樣 09/20 20:16
potter1529:迴圈的變數當然是沒有重複的..這樣錯就讓人有點費解了 09/20 20:17
doom8199:原po有嘗試拆成多個 sub-function 去 debug 嗎? 09/22 01:42
doom8199:由小功能慢慢加上去,自然就找得出癥結點在哪 09/22 01:43
doom8199:程式可以跑,不代表寫出來的東西就是正確的 09/22 01:44
potter1529:是 我知道 謝謝你 只是幾千行要這樣搞實在是很麻煩 因 09/22 23:01
potter1529:此.......當然是希望能直接找到癥結點啦 找不到就只能 09/22 23:02
potter1529:這樣做了 09/22 23:02