# Array indices must be positive integers or logical values.

1 view (last 30 days)
Irfan Tariq on 9 Sep 2019
I am getting above error.
data_out(i,1:dtn)=data_in_temp(colum-dtn+1):colum)
where dataout =1586*128 double
row=1586;
colum=128
dtn=129;
data_in_temp=1*128

Show 1 older comment
Stephen Cobeldick on 9 Sep 2019
This is not valid MATLAB syntax (check the parentheses):
... = data_in_temp(colum-dtn+1):colum)
Bjorn Gustavsson on 9 Sep 2019
colum-dtn+1
should become 0 with the values you've given, matlab uses 1-based indexing, so your indices has to be larger than zero. Possibly your left-hand-side index i is also unallowed, but if you've set that one to a positive integer then it's OK (I've stopped use i and j as indices - sooner or later one tend to use them for their purpose of the imaginary 1i. Instead I use i1, i2 and j1 etc for simple loop-variables, that saves me from occasional but very irritating bugs and errors.)
HTH
Fabio Freschi on 9 Sep 2019
true, but the error pointed out by the OP is about wrong indexing

Stephen Cobeldick on 9 Sep 2019
Edited: Stephen Cobeldick on 9 Sep 2019
>> colum = 128;
>> dtn = 129;
>> colum-dtn+1
ans = 0
MATLAB indexing start at 1.

Irfan Tariq on 9 Sep 2019
so what should be the valid syntax for the above soultion.
Stephen Cobeldick on 9 Sep 2019
data_out(i,:) = data_in_temp;

in Matlab, matrix indices start from one, not zero like other programming languages, but your index starts from zero:
colum-dtn+1 = 0
so what you are actually doing is this:
data_out(i,1:129)=data_in_temp(0:128)
I guess what you did try to do is more like copy the entire row of data_in_temp into the i'th row of data_out?
if so, try this:
data_out(i,:) = data_in_temp
or if you are trying to copy a subset of that row, make sure the index of data_in_temp is the same size as that of data_out