“对于数组使用insert时,”未对齐的对象的TypeError:len()“

时间:2011-11-18 17:30:17

标签: python numpy typeerror

目标:在给定索引位置(i)的数组中插入一行

使用的语言:带有numpy库的python

示例:

i=2.0;
a=array([[1,2,3],[2,3,4],[3,4,5],[6,7,8]],dtype=float);
a=insert(a,i,[-1,-1,-1],axis=0);

这给出了错误:TypeError: len() of unsized object

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

如果您查看insert的文档:

>>> help(insert)
你发现:

Parameters
----------
arr : array_like
    Input array.
obj : int, slice or sequence of ints
    Object that defines the index or indices before which `values` is
    inserted.
values : array_like
    Values to insert into `arr`. If the type of `values` is different
    from that of `arr`, `values` is converted to the type of `arr`.
axis : int, optional
    Axis along which to insert `values`.  If `axis` is None then `arr`
    is flattened first.

看看你做了什么,很明显问题是obj必须是int,slice或一系列int,而不是浮点(i = 2.0)。 / p>

如果设置i=2,您的示例不会抛出错误。我不知道这是否是你想要的,因为你没有陈述所需的输出。

答案 1 :(得分:1)

这是要注意numpy版本1.8.1对int进行隐式转换,因此不会为OP的代码引发错误!

>>> import numpy as np
>>> np.__version__
1.8.1

OP的代码 -

>>> i = 2.0;
>>> a = np.array([[1,2,3],[2,3,4],[3,4,5],[6,7,8]],dtype=float);
>>> a = np.insert(a,i,[-1,-1,-1],axis=0);


>>> a 
array([[ 1.,  2.,  3.],
       [ 2.,  3.,  4.],
       [-1., -1., -1.],
       [ 3.,  4.,  5.],
       [ 6.,  7.,  8.]])

答案 2 :(得分:0)

我找到了这个bug。 它给出了错误i = 2.0是一个索引,也浮动,使python

混淆

解决方案是将insert()的index属性强制转换为int

根据问题的例子:

CODE:

i=int(2.0);     # TYPE CASTED AS INT

a=array([[1,2,3],[2,3,4],[3,4,5],[6,7,8]],dtype=float);

a=insert(a,i,[-1,-1,-1],axis=0);