代码之家  ›  专栏  ›  技术社区  ›  Anna Huang

TypeError:在0-d数组Python上迭代

  •  10
  • Anna Huang  · 技术社区  · 7 年前

    我正在尝试编写一个非常基本的最近邻计算。我基本上想看看t是什么样子,但我得到了这个类型错误。当我要求function返回时,它说的是“”。当我让它转向列表时,它抛出了“TypeError:0-d数组Python上的迭代”

    请问我该怎么修?

    ...
    
    t = np.array(map(lambda v:
                 map(lambda w: distance(v, w, L), x_train.values),
                 x_test.values)) 
    
    ...
    

    完整跟踪: enter image description here

    2 回复  |  直到 5 年前
        1
  •  13
  •   jpp    7 年前

    问题是 np.array 不接受迭代器,需要转换为 list 首先,如下所示:

    t = np.array(list(map(lambda v: map(lambda w: distance(v, w, L),
                          x_train.values), x_test.values)))
    

    根据 numpy.array documentation ,所需参数必须为:

    一个数组,任何暴露数组接口的对象,一个 array方法返回一个数组或任何(嵌套的)序列。

    或者,使用 numpy.fromiter 记住提供 dtype ,例如。 dtype=float .

        2
  •  2
  •   Tijs Maas    4 年前

    可以使用 arr1 = np.load(..., allow_pickle=True) . 访问作为np存储的项目。数组,使用:

    arr1.item()
    

    例如,如果存储的类型是 dict d1 = {'item1':42, 'item2':np.array(1,3)} 我们可以得到如下值: v1 = arr1.item()['item2'] .

    重要事项: 正在加载 allow_pickle=True is带来安全风险,不推荐使用。