作者potter1529 (宋代才女唱元曲)
看板MATLAB
標題Re: [問題] 讀檔Index exceeds matrix dimensions
時間Sat Sep 15 01:23:29 2012
: 結果就是
: 當迴圈的第一次,也就是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);
: 請問這是什麼問題?
1F:→ 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
2F:推 doom8199:嘗試把 (大量運算) 寫成一個 function, 或是養成習慣 09/19 20:54
3F:→ doom8199:把用完無 reuse 的 data clear 掉 09/19 20:55
4F:→ doom8199:bug 有很多種,例如變數 i or x 在(大量運算) 裡重複出現 09/19 20:56
5F:→ doom8199:或是原po使用了會讓 matlab 誤判的變數名稱 (ex: size) 09/19 20:58
6F:→ potter1529:嗯..當然有可能是那樣沒錯 可是程式裡面我"只"加了一個 09/20 20:16
7F:→ potter1529:框住所有內容的迴圈 也就只是讓它從一次變兩次這樣 09/20 20:16
8F:→ potter1529:迴圈的變數當然是沒有重複的..這樣錯就讓人有點費解了 09/20 20:17
9F:→ doom8199:原po有嘗試拆成多個 sub-function 去 debug 嗎? 09/22 01:42
10F:→ doom8199:由小功能慢慢加上去,自然就找得出癥結點在哪 09/22 01:43
11F:→ doom8199:程式可以跑,不代表寫出來的東西就是正確的 09/22 01:44
12F:→ potter1529:是 我知道 謝謝你 只是幾千行要這樣搞實在是很麻煩 因 09/22 23:01
13F:→ potter1529:此.......當然是希望能直接找到癥結點啦 找不到就只能 09/22 23:02
14F:→ potter1529:這樣做了 09/22 23:02