Xabier Garcia Andrade
Xabier Garcia Andrade

Reputation: 391

How to fix "TypeError: len() of unsized object"

I am getting:

TypeError: len() of unsized object

after running the following script:

from numpy import *

v=array(input('Introduce un vector v: '))
u=array(input('Introduce un vector u: '))

nv= len(v)
nu= len(u)

diferenza= 0; i=0

if nv==nu:

    while i<nv:
        diferenza=diferenza + ((v[i+1]-u[i+1]))**2

    modulo= sqrt(diferenza)
    print('Distancia', v)
else:
    print('Vectores de diferente dimensión')

How can I fix this?

Upvotes: 22

Views: 87947

Answers (3)

Vysakh AK
Vysakh AK

Reputation: 1

In my case, I had to input two sets of values to two numpy arrays but it was not working.

import numpy as np
x=np.array(input('enter x values '))
y=np.array(input('enter y values '))
m=(len(x)*sum(x*y)-sum(x)*sum(y))/(len(x)*sum(x*x)-sum(x)**2)
c=(sum(y)-m*sum(x))/len(x)
print ('the required straight line is','y=',m,'x+ ',c)

This was the error that showed up. "TypeError: len() of unsized object"

Then I modified it by adding eval() function and everything is working fine.

import numpy as np
x = np.array(eval(input("enter x value: ")))
y = np.array(eval(input("enter y value: ")))
m = ( len(x)*sum(x*y)-sum(x)*sum(y))/(len(x)*sum(x**2)-sum(x)**2)
c = (sum(y)-m*sum(x))/len(x)

print("The required straightline is: y =",m,"x +",round(c,5))

Upvotes: 0

ptyshevs
ptyshevs

Reputation: 1672

For me this error occurred when I had the following situation:

import numpy as np

arr = np.array([[1]])

arr_squeezed = arr.squeeze()
len(arr_squeezed)  # TypeError: len() of unsized object

For this to work properly, make sure that array you're squeezing contains more then one element.

Upvotes: 0

Moses Koledoye
Moses Koledoye

Reputation: 78554

Use the arrays' size attribute instead:

nv = v.size
nu = u.size

You also probably want to use numpy.fromstring to take and convert the input string into an array:

>>> v = np.fromstring(input('enter the elements of the vector separated by comma: '), dtype=int, sep=',')
enter the elements of the vector separated by comma: 1, 2, 3
>>> v
array([1, 2, 3])
>>> len(v)
3
>>> v.size
3

Upvotes: 21

Related Questions