Reputation: 391
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
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
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
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