【问题标题】:How to fix "TypeError: len() of unsized object"如何修复“TypeError: len() of unsized object”
【发布时间】:2016-10-19 21:56:19
【问题描述】:

我得到:

TypeError: len() of unsized object

运行以下脚本后:

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')

我该如何解决这个问题?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    改用数组的size 属性:

    nv = v.size
    nu = u.size
    

    您可能还想使用numpy.fromstring 将输入字符串转换为数组:

    >>> 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
    

    【讨论】:

    • 假设向量lensize 是等价的。但我投了反对票,因为numpy.array 确实与len 一起工作,除非它是一个标量(会引发上述错误)。
    • 这实际上很有意义!谢谢你的解释
    • @MSeifert 所以我们不需要假设 len.size 是相同的,因为事实上它们已经是相同的,因为 OP 正在使用向量
    • @MSeifert 没问题。干杯
    • np.fromstring 是一个很好的推荐,所以我删除了反对票。
    【解决方案2】:

    对我来说,当我遇到以下情况时会发生此错误:

    import numpy as np
    
    arr = np.array([[1]])
    
    arr_squeezed = arr.squeeze()
    len(arr_squeezed)  # TypeError: len() of unsized object
    

    要使其正常工作,请确保您正在压缩的数组包含多个元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-20
      • 2020-04-23
      • 2019-01-12
      • 2016-03-14
      • 2012-01-01
      • 2018-04-25
      • 1970-01-01
      • 2021-10-05
      相关资源
      最近更新 更多