# Index in position 1 is invalid. array indices must be positive integers or logical values.

743 views

## Problem :

I am facing following error message:

Index in position 1 is invalid. Array indices must be positive integers or logical values.

My code is as follows:

clc;

close all;

clear;

PD=phantom('Modified Shepp-Logan');

subplot(2,3,1)

imagesc(PD);

colormap('gray');

title('Circle Phantom')

xlabel('X')

ylabel('Y')

freq = 2;

thetas = 0:freq:180;

gtheta  = length(thetas);

gl = size(PD,1);

sinogram = zeros(gl,gtheta);

for i = 1:length(thetas)

tmpImage      = imrotate(PD,-thetas(i),'bilinear','crop');

sinogram(:,i) = sum(tmpImage);

end

subplot(2,3,2)

imagesc(sinogram);

title('Circle Sinogram');

xlabel('l');

ylabel('\theta');

thetas=0;

Fl = size(sinogram,1);

Ftheta  = length(thetas);

thetas = (pi/180)*thetas;

g0 = zeros(Fl,Fl);

Fmid = ceil(Fl/2);

[x,y] = meshgrid(ceil(-Fl/2):ceil(Fl/2-1));

for i = 1:Ftheta

rotCoords = Fmid+round(x*sin(thetas(i)) + y*cos(thetas(i)));

rotCoords=floor(abs(rotCoords));

g0 = g0 + sinogram(rotCoords,i)./Ftheta;

end

subplot(2,3,3);

imagesc(g0);

title('Simple backprojection')

xlabel('X')

ylabel('Y')

The error message is occurring as follow:

Index in position 1 is invalid. Array indices must be positive integers or logical values.

Can anybody tell me why the issue is here?

## Solution :

You are trying as follows:

Fmid = ceil(Fl/2);

[x,y] = meshgrid(ceil(-Fl/2):ceil(Fl/2-1));

rotCoords = Fmid+round(x*sin(thetas(i)) + y*cos(thetas(i)));

Generally when sin(thetas) is equal to 1 then cos(thetas) is equal to 0. So the rotCoords would be Fmid + round(x*1 + y*0) which can be as low as ceil(Fl/2) + ceil(-Fl/2) which will be 0. So the rotCoords can comes out 0, which is clearly the invalid index.

Please Note : In practice your rotCoords are in the range 0 to 259, where 259 is Fl-1

## Solution:

1. somehow you have aa variable in your workspace that is named Px so matlab thinks you are indexing instead of calling a function.

1. we think we just solved it by renaming Px to some other name. What do you mean by a workspace here, because on my main program, we don't see any Px only except for the function call
2. Your code is not a function, so if you were to do
3. Px = 'hello';
1. before running the code then Px would be considered to be a variable instead of a function. You might have assigned something to Px in an earlier version of the code and not cleared your variables since then. Using functions instead of scripts protects against this kind of accidental use of left-over variables. Also you are using load() without assigning the output to a variable. If you happened to have a variable named Px in the .mat file, the stored value would become active. It is recommended that you assign load() to a variable and access the structure, something like

filestruct = load('lowpasssignal.mat');
dsp = filestruct.dsp;   %pull out the specific variable you need from the structure.

## Related questions

25 views
3 views
Problem: Hi ! I am facing this issue can any body help please?
138 views
Problem : The below error occurs quite frequently to me: &ldquo;Subscript indices must either be real positive integers or logical&rdquo; I want to have a general solution for dealing with above problem.
76 views
Problem : I am currently trying to run my code but found the really annoying problem which I am unable to solve. The function that I am currently working out is as below; function myout = MyCointPairs(MyPriceMat, MySymbols) myout=[]; MyNofStocks = size(MyPriceMat, 2); ... is the price matrix of 60x10, and "MySymbols" is the 10x1 string. One more doubt from my side what are "Subscript indices"?
2 views
Problem: I'm currently running my code, and found an annoying problem that I really haven't got any idea to solve. The function that I'm working out is as follows; function out = CointPairs(PriceMat, Symbols) out=[]; NofStocks = size(PriceMat, 2); CointMatrix= ... 60x10, and "Symbols" is 10x1 string. One more question :) what's exactly meant by "subscript indices"? MUCH appreciated in advance xx
1 view
Problem: Hi there! I want to know that what does a negative number passed as an index means? I saw the following code somewhere: lst = [1,2,3,4,5] for i in range(5): print(lst[-1]) I do not understand what does print(lst[-1]) mean? Could someone please explain to me this syntax and when and why do we use it?
2 views
Problem: Who can give me the solution of this topic I have got as a queston that indices must be integers or slices not float?