Index Error

Prasad, Ramit ramit.prasad at jpmorgan.com
Tue Nov 20 21:39:51 CET 2012


Can you please post in plain text and stop top-posting? Thanks. 

inshu chauhan wrote:
> 
> def distance(c, p):
>     dist = sqrt(
>             ((c[0]-p[0])**2) +
>             ((c[1]-p[1])**2) +
>             ((c[2]-p[2])**2)
>             )
>     return dist
> 
> 
> def GenerateRing(x,y, N): Generates square rings around a point in data which has 300 columns(x) and 3000
> rows(y)
>     indices = []
>     for i in xrange(-N, N):
>         indices.append((x+i, y-N))
>         indices.append((x+N, y+i))
>         indices.append((x-i, y+N))
>         indices.append((x-N, y-i))
>     return indices

No, this creates a one dimensional list with 2N elements of where each element is a two item tuple.


> 
> 
> def ComputeClasses(data):
>     radius = .5
>     points = []
>     for cy in xrange(0, data.height):
>         for cx in xrange(0, data.width):
> 
>             if data[cy,cx] == (0.0,0.0,0.0):
>                 continue
>             else :
>                 centre = data[cy, cx]
>                 points.append(centre)
> 
> 
>             change = True
> 
>             while change:
> 
>                 for ring_number in xrange(1, 100):
>                     change = False
>                     new_indices = GenerateRing(cx, cy, ring_number)
>                     print new_indices
>                     for idx in new_indices:                                  I need help in this part as I am
> unable to device a method in which if the points are out of index,it should stop and
>                         if idx[0] >= 300 and idx[1] >= 3000:           go to next centre and start generating
> rings from there.. and again if the index is out of range .. this should repeat
>                             continue
>                         else :
>                             point = data[idx[0], idx[1]]

You can use a few different methods. This is just one example.

for idx, temp_point in enumerate(new_indices):
    try:
        temp_point[0]
        temp_point[1]
    except Exception: #Should be IndexError I think.
        print 'idx: {0}\ntemp_point:{1}'.format(idx, temp_point) 
        # Possibly add a break or exit so you do not have to
        # keep going once you hit a failure.
    point = data[temp_point[0], temp_point[1]] 


What is `data`? I have not seen any built-in structure that takes
a tuple in this manner...unless it is a dictionary. Or from numpy.
Given my lack of knowledge of what `data`, it could be the
problem is there. That is one reason I accessed `temp_point[0]` and
`temp_point[1]` separately.


>                             if point == (0.0, 0.0, 0.0 ):
>                                 print point
>                                 continue
>                             else:
>                                 dist = distance(centre, point)
>                                 print dist
>                                 if  dist < radius :               and rings should be added only when this
> condition is satisfied
>                                     print point
>                                     points.append(point)
>                                     change = True
>                                     print change
> 
> 
>                         break
> 
> 
>             print points
> 
> 
> ERROR now :
> 
> data loaded
> [(296, 403), (298, 403), (298, 405), (296, 405), (297, 403), (298, 404), (297, 405), (296, 404)] ... I am
> printing Indices to know what index it dies out..
> 
> Traceback (most recent call last):
>   File "Z:/modules/Classify.py", line 73, in <module>
>     ComputeClasses(data)
>   File "Z:/modules/Classify.py", line 49, in ComputeClasses
>     point = data[idx[0], idx[1]]
> error: index is out of range
> 

Is that the actual error? If so, then the problem is not `idx` or 
`temp_point` but instead `data`. If it is not the exact error, please 
copy and paste the error message *exactly* as given.

>>> [1][2]
IndexError: list index out of range
>>> (1,2)[3]
IndexError: tuple index out of range


~Ramit


This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  


More information about the Python-list mailing list