Not Yet Answered # type error

Gribouillis 1,313 Discussion Starter Inshu Gribouillis 1,313 Discussion Starter Inshu Gribouillis 1,313 Discussion Starter Inshu Schol-R-LEA 1,003 Discussion Starter Inshu Schol-R-LEA 1,003 Discussion Starter Inshu Write a C program that should create a 10 element array of random integers (0 to 9). The program should total all of the numbers in the odd positions of the array and compare them with the total of the numbers in the even positions of the array and indicate ...

0

It means that a function tried to call an attribute getitem on a float object, like this code

```
>>> x = 3.14
>>> x.getitem
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute 'getitem'
```

Here are similar errors

```
>>> x = 3.14
>>> x.date_of_birth
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute 'date_of_birth'
>>> x.email_address
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute 'email_address'
```

0

So what change should i make in my programme to avoid this error ??

My Part of prog which is giving this error is :

```
def calcdist(data):
for p in data:
x = p[:1]
y = p[:2]
z = p[:3]
for i in range(len(data)):
dist = sqrt((x[i]-x[i+1])^2 + (y[i]-y[i+1])^2 +(z[i]-z[i+1]^2))
return dist
def ReadPointCloud(filename):
return [tuple(map(float, l.split()[1:4])) for l in open(filename)]
```

1

This code is not indented, so it can't run. Notice that the power operator is `**`

, not `^`

, python is not latex. Also when there is an error, python outputs a long message, starting with the word Traceback (most recent call last). To find the error, you must analyze this message, and if you want people to be able to help you, you should post the code *and* the traceback.

*Edited 4 Years Ago by Gribouillis*

0

```
import cv
from math import floor, sqrt, ceil
from numpy import array, dot, subtract, add, linalg as lin
def calcdist(data):
for p in data:
x = p[0]
y = p[1]
z = p[2]
for i in range(len(data)):
dist = sqrt((x[i]-x[i+1])**2 + (y[i]-y[i+1])**2 +(z[i]-z[i+1]**2))
return dist
def ReadPointCloud(filename):
return [tuple(map(float, l.split()[1:4])) for l in open(filename)]
def main (data):
for i in range(len(data)): # Finding Neighbours
for j in range(len(data)):
dist = calcdist(data)
print dist
if __name__ == '__main__':
data = ReadPointCloud(r'C:\Thesis\NEHreflectance_Scanner_1_part.txt')
data = data[0:100]
main(data)
```

This is the error in the above programme to loop within a list and calculate distance between 2 3d points with in the list..

```
Traceback (most recent call last):
File "C:\Users\inshu\Desktop\cal-dist.py", line 29, in <module>
main(data)
File "C:\Users\inshu\Desktop\cal-dist.py", line 22, in main
dist = calcdist(data)
File "C:\Users\inshu\Desktop\cal-dist.py", line 11, in calcdist
dist = sqrt((x[i]-x[i+1])**2 + (y[i]-y[i+1])**2 +(z[i]-z[i+1]**2))
TypeError: 'float' object has no attribute '__getitem__'
```

0

Python complains because x, y, z are floating point numbers and you cannot write `x[i]`

when x is a number. Apart from that, your main function is meaningless. At line 20, you try to compute a quantity which does not depend on i and j. Then why compute it in a double loop ? Each iteration will yield the same result. Also the comment `# Finding Neighbours`

is meaningless. Start by defining the expected output of your computation.

0

if I cannot write x{i] what should i do to take difference between two consequtive points in my loop which are {x, y,z} and {x+i, y+i, z+i} and yes u r write my main is useless yet.. m trying to make a nested loop for taking a point in main nd calculating distance using another point in main .. m so confused..

2

OK, I can see your getting flustered, so let's back away from the code for a bit and consider the overall problem you are trying to solve. Just what is the program supposed to compute, and how would you do it by hand if you had to? I don't mean you should actually go through it manually, just sketch out the process for us.

Also, I would recommend removing any `import`

statements that aren't strictly needed. They simply clutter up both the code and the namespace.

*Edited 4 Years Ago by Schol-R-LEA*

0

```
Ok I will try to xplain my prob here step by step :
Step 1 : Read a file containing 3 co-ordinates of a point in a point cloud data
Step 2 : Take a point and find its nearest neighbours which m trying to by the above
Prog that is :
1. Read first point from the list , find its distance with other points in the
list. Find the points which are at shortest distance from it.
2. Repeat first step for every point in data, and try to find neighbours of each
point.
3. Store these points in the list sorting them with incresaing distance. {means
the distance between first point and last point in the list should be maximum}
4. Then proceed to Step 3
Step 3 : Calculate centre for every 5 points in the list. which i am doin by the code (nd thankfully it is working)
def CalcCentre(data):
centre = array([0,0,0])
count = 0
for p in data:
centre = add(centre, array(p[:3]))
count += 1
centre = dot(1./count, centre)
return centre
Step 4 : Compute Covariance matrix for the 5 points doing by :
def CalcCovarianceMatrix(data, centre)
covariance = array([(0,0,0),
(0,0,0),
(0,0,0)])
for point in data:
diff = subtract(array(point[:3]), centre
matrix = array([(diff[0]*diff[0], diff[0]*diff[1], diff[0]*diff[2]),
(diff[0]*diff[1], diff[1]*diff[1], diff[1]*diff[2]),
(diff[0]*diff[2], diff[1]*diff[2], diff[2]*diff[2])])
covariance = add(covariance, matrix)
covariance = dot(1./(len(data)-1), covariance)
return covariance
Step 5 : Compute Eigen values and EIgen vector for the points.
Step 6 : Classify the points in sphere or plane using some threshold value.
```

3

Ah, this does clarify things somewhat. OK, then.

I think you'll want to fix `calcdist()`

first; divorce it from the data stream as it is and have it take two three-tuples as it's argument:

```
def (a, b):
return sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2 + (a[2]-z[2])**2)
```

Better still might be to write a `Point3D`

class to represent your data, though that may be a bit heavyweight. On second thought, it would porbably save you a lot of trouble:

```
from math import sqrt
from sys import maxsize
class Point3D(object):
""" Representation of a point in three dimensions."""
def __init__(self, *args):
""" C'tor for the Point3D class. Can accept either a tuple, a list, or a set of three separate arguments as it's initialization. """
if len(args) == 1 and (isinstance(args, tuple) or isinstance(args, list)):
self.x, self.y, self.z = args[0]
elif len(args) == 3:
self.x, self.y, self.z = args
else:
raise TypeError
def __str__(self):
""" String representation of a Point3D. """
return "<{0}, {1}, {2}>".format(self.x, self.y, self.z)
def __repr__(self):
""" Extended representation of the Point3D objects - the same as the string representation."""
return str(self)
def __eq__(self, other):
""" Test for equality between two Point3D objects."""
return ((self.x == other.x) and (self.y == other.y) and (self.z == other.z))
def __ne__(self, other):
""" Test for inequality between two Point3D objects."""
return not self == other
def distance(self, other):
""" Computes the distance between two Point3D points."""
return sqrt((self.x - other.x) ** 2 + (self.y - other.y) ** 2 + (self.z - other.z) ** 2)
def findShortestDistance(data):
shortestDistance = maxsize
for a in data:
v = Point3D(a)
for b in data:
w = Point3D(b)
if v != w:
d = v.distance(w)
if d < shortestDistance:
shortestDistance = d
return shortestDistance
if __name__ == "__main__":
print(findShortestDistance(((1.0, 2.0, 3.0), (4.0, 5.0, 6.0), (11.0, 3.0, 21.0) )))
```

This gives you a more abstract way of looking at the points. Re-writing the `barycentre()`

function as a method of the class is left as an exercise.

I wouldn't normally do so much for you, but the way you were floundernig made it clear you needed a new approach to the problem.

0

oh thanx , infact I was not expecting so much from you.. I want to learn python and working with it .. I need someone who just tell my prog is write or wrong... and help me in identifying the blunders in it... Thanx ..i try to write the prog for centre nd send u here..

This article has been dead for over six months. Start a new discussion instead.

Recommended Articles

Hi. so this is actually a continuation from another question of mineHere but i was advised to start a new thread as the original question was already answered.

This is the result of previous question answered :

code for the listbox - datagridview interaction

At the top of the code ...

the function that I created to find the ...