: On 21 October 2012 06:09, inshu chauhan <insidesh...@gmail.com> wrote: > I am new to python and have a little problem to solve ..
> import cv This module is not used in your code [and isn't part of the standard library]. > from math import floor, sqrt, ceil You're only using one of these functions. > from numpy import array, dot, subtract, add, linalg as lin You're not using any of this. > for p in data: > x = p[0] > y = p[1] > z = p[2] You're repeatedly making assignments in this loop, but because your subsequent loop is not nested inside it, only the last iteration of x, y, z will have anything done with them. > for i in range(len(data)): Whenever you find yourself writing for i in range(len(seq)): you're doing something wrong. Instead use something like for a, b, c in seq: or, if you really need the index, for i, (a, b, c) in enumerate(seq): > dist = sqrt((x[i]-x[i+1])**2 + (y[i]-y[i+1])**2 +(z[i]-z[i+1]**2)) As previously noted, you're going to be repeatedly working with the last values of x, y and z from the previous loop here. In addition, since x, y and z are, according to your traceback, floats, trying to access their members as though they are sequences isn't going to work. > return dist This return statement is inside a loop, and will terminate the function the first time it's called. That might not be what you want. > def ReadPointCloud(filename): > return [tuple(map(float, l.split()[1:4])) for l in open(filename)] Assuming your file is along these lines: p1 1.23 4.56 7.89 p2 9.87 6.54 3.21 ... ReadPointCloud() ought to work. However, it's not very readable - map() is sometimes useful, but usually a list comprehension is clearer. This is better: def ReadPointCloud(filename): """Return a list of 3-tuples from ``filename``.""" # not tested: points = [] with open(filename) as f: for line in f: point = tuple(float(x) for x in l.split()[1:4]) points.append(point) return points > def main (data): > > for i in range(len(data)): # Finding Neighbours > for j in range(len(data)): > dist = calcdist(data) > print dist This will call calcdist() on everything in data, N**2 times [where N is the number of points you're working with]. That's probably not what you want. > if __name__ == '__main__': > data = ReadPointCloud(r'C:\Thesis\NEHreflectance_Scanner_1_part.txt') Except for throwaway programs, it's not a good idea to hard-code filenames like this. Better: if __name__ == '__main__': import sys data = ReadPointCloud(sys.argv[1]) In summary: copy-pasting code you don't understand and mashing it together randomly is not generally considered an effective development technique. -[]z. -- http://mail.python.org/mailman/listinfo/python-list