"index exceeds matrix dimensions" error.
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Daniel
il 8 Mar 2011
Commentato: Walter Roberson
il 7 Mar 2017
I keep getting the "index exceeds matrix dimensions" error when I get to problem 3 with my code. If i were to run the code separately and using clc and clear, it works fine. I also have to use clc and clear every time i want to run my code. Is there any way I can run it without doing so? Thank you! This is my code:
%Problem 1
disp('Answers to Problem 1: ')
fprintf('\n')
N = input('Please enter an integer: ');
while (N < 0 ||(N~=fix(N)));
disp('You have entered an invalid integer. Please try again. ')
N = input('Please enter an integer: ');
end
a = sum(1:N);
fprintf('The sum of integers from 1 to %.0f is: %.2f\n ',N,a)
sum = 0;
for a = 1:N;
sum = sum+a;
end
fprintf('The sum of integers 1 to %.0f is: %.2f\n ',N,sum);
%Problem 2
fprintf('\n')
disp('Answers to Problem 2: ')
fprintf('\n')
K = input('Please enter an integer: ');
product = 1;
while (K < 0 ||(K~=fix(K)))
disp('You have entered an invalid number. Please try again. ')
K = input('Please enter an integer: ');
end
y = prod(1:K);
fprintf('The product of integers 1 to %.0f is: %.1f\n ',K,y)
for y = [1:K];
product = product*y;
end
fprintf('The product of integers 1 to %.0f is: %.1f\n',K,product)
%Problem 3
fprintf('\n')
disp('Answers to Problem 3: ')
fprintf('\n')
Vector = input('Enter a vector while using [] around the numbers: ');
b = sum(Vector);
fprintf('The sum of the elements in the vector = %.3f\n ',b)
sumvec = 0;
w = length(Vector);
for e = 1:w
sumvec = sumvec + Vector(e);
end
fprintf('The sum of the elements in the vector = %.3f\n ',sumvec)
%Problem 4
fprintf('\n')
disp('Answers to Problems 4: ')
fprintf('\n')
P = input('Please enter a value for the first number: ');
Q = input('Please enter a value for the second number: ');
if (P < 0||(P~=fix(P)||(Q~=fix(Q)||(P > Q))))
disp('Please enter valid integers.')
fprintf('\n')
disp('I.E. Whole numbers & first number must be less than the second number.')
P = input('Please enter a value for the first number: ');
Q = input('Please enter a value for the second number: ');
else
t = prod(P:Q);
fprintf('The product of %d to %d is: %d\n ',P,Q,t)
product = 1;
for u = [P:Q];
product = product*u;
end
fprintf('The product of %d to %d is: %d\n ',P,Q,product)
end
%Problem 5
fprintf('\n')
disp('Answer to Problem 5: ')
fprintf('\n')
for k = 1:4
for t = 4:-1:k
fprintf('*')
end
fprintf('\n')
end
for k = 4:-1:1
for t = 4:-1:k
fprintf('^')
end
fprintf('\n')
end
0 Commenti
Risposta accettata
Walter Roberson
il 8 Mar 2011
In problem 1, you defined "sum" as a variable. Then in problem 3, you attempt to use "sum" as a function.
0 Commenti
Più risposte (4)
Sean de Wolski
il 8 Mar 2011
It probably means that whatever variable you're using to index is already defined elsewhere and not redefined in your code. Type
dbstop if error
and inspect the variables when it errors out. You don't need clc and you should be able to use
clearvars
instead of clear; just insert it at the top of the script.
0 Commenti
maged al-dhaeebi
il 22 Apr 2013
Modificato: Walter Roberson
il 22 Apr 2013
Index exceeds matrix dimensions.
I have the same probelm in my code hwo to solve this
my code it :
FolderNames={'Data0', 'Data45','Data90','Data135','Data180','Data225','Data270','Data315'}
FolderIndx=1
SaveFileName=strcat('ProcessData',num2str(FolderIndx));
SaveImageFileName=strcat('ImageData',num2str(FolderIndx));
AngleAr=45*[4,5,6,7,0,1,2,3]';
FoldName=FolderNames{FolderIndx}
list=ls(FoldName)
for FrqIndx=1 : 3
FileName=strcat(FoldName,'\', list(FrqIndx+2,:));
StrData=load(FileName);
[XData,YData,ZData,ImageData]=ProcessRawData(StrData,AngleAr,FolderIndx)
SpotsDataX{FrqIndx}=XData;
SpotsDataY{FrqIndx}=YData;
SpotsDataZ{FrqIndx}=ZData;
Images{FrqIndx}=ImageData;
size(Images)
end
save (SaveFileName,'SpotsDataX','SpotsDataY','SpotsDataZ');
save (SaveImageFileName,'Images');
1 Commento
Walter Roberson
il 22 Apr 2013
Which line does the problem occur on?
Your code assumes that each of those folders already contains at least 5 directory entries including "." and ".." (which are not promised to be the first two entries, by the way.) If one of the folders contains fewer entries then you would get index out of range accessing list(FrqIndx+2,:)
Manjiree Waikar
il 7 Mar 2017
Modificato: Walter Roberson
il 7 Mar 2017
I have this error in my code as
Index exceeds matrix dimensions. Error in clusteredit (line 21) green = imIDX(:,:,2); % Green channel
Please help me how to tackle this error.
My code is-
clear all;
newImageRGB = imread('p2_left_norm_1.bmp');
figure;
imshow(newImageRGB);
title('Original image');
grayImage = rgb2gray(newImageRGB);
figure;
imshow(grayImage);
title('grayscale image');
afterWiener = wiener2(grayImage,[6 6]);
figure;
imshow(afterWiener);
title('Wiener filter');
imData=reshape(afterWiener,[],1);
imData=im2double(imData);
[IDX mn]=kmeans(imData,3);
imIDX=reshape(IDX,size(afterWiener));
red = imIDX(:,:,1); % Red channel
green = imIDX(:,:,2); % Green channel
blue = imIDX(:,:,3); % Blue channel
a = zeros(size(imIDX, 1), size(imIDX, 2));
just_red = cat(3, red, a, a);
just_green = cat(3, a, green, a);
just_blue = cat(3, a, a, blue);
back_to_original_img = cat(3, red, green, blue);
figure,
imshow(just_red),
title('Red channel')
figure,
imshow(just_green),
title('Green channel')
figure,
imshow(just_blue),
title('Blue channel')
1 Commento
Walter Roberson
il 7 Mar 2017
Looking in reverse order, you have
green = imIDX(:,:,2); % Green channel
after
imIDX=reshape(IDX,size(afterWiener));
after
afterWiener = wiener2(grayImage,[6 6]);
after
grayImage = rgb2gray(newImageRGB);
So you are taking an RGB image, transforming it to gray, doing a wiener2 transform on it, getting a 2D result. The size of the 2D result is used to reshape the matrix IDX, so the result of the reshape is going to be 2D. You then try to index the third dimension of that 2D matrix.
Possibly at some point after reshaping IDX, you wanted to use those indices to index into the original color image, such as
R = newImageRGB(:,:,1);
G = newImageRGB(:,:,2);
B = newImageRGB(:,:,3);
red = R(IDX);
green = G(IDX);
blue = B(IDX);
Vedere anche
Categorie
Scopri di più su Signal Processing Toolbox in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!