目标:在给定索引位置(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
。
有什么想法吗?
答案 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);