我正在做一些图像检测。检测算法有一行代码导致错误。
代码行:
im_rois = im_rois.astype(np.float, copy=False)
错误是:
Error: ValueError: setting an array element with a sequence.
我打印了im_rois的内容。他们是:
[[ array([[ 56.04, 57.32, 317.16, 285.16],
[ 125.16, 17.64, 332.52, 285.16],
[ 1. , 1. , 427.24, 639.72],
...,
[ 201.96, 1. , 248.04, 50.92],
[ 286.44, 1. , 350.44, 47.08],
[ 304.36, 244.2 , 338.92, 349.16]])]]
好奇,如果有人能指出我的方向。
答案 0 :(得分:2)
我可以使用以下序列重现您的错误:
In [1317]: im=[[np.array([[1,2,3]])]] # list containing array
im.astype(float)
会产生AttributeError: 'list' object has no attribute 'astype'
,因为它是一个列表,而不是一个数组。
但是我可以将它嵌入到一个对象数组中:
In [1318]: x=np.empty((1,),dtype=object)
In [1319]: x[0]=im
In [1320]: x
Out[1320]: array([[[array([[1, 2, 3]])]]], dtype=object)
print
看起来像你的;请注意内部列表中的逗号。
In [1321]: print(x)
[[[array([[1, 2, 3]])]]]
如果它是一个ndim数组,那么打印就没有逗号。
In [1325]: print(np.array([[[1,2,3]]]))
[[[1 2 3]]]
现在当我尝试astype
时,我得到了你的价值错误。
In [1322]: x.astype(np.float)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1322-1bc194707569> in <module>()
----> 1 x.astype(np.float)
ValueError: setting an array element with a sequence.
但不知道如何创建im_rois
我无法建议避免这种情况的方法。如果im_rois
是
array([[ 56.04, 57.32, 317.16, 285.16],
[ 125.16, 17.64, 332.52, 285.16],
[ 1. , 1. , 427.24, 639.72],
...]])
它不会给出这个错误。
我会检查以确保您正在为此包提供正确的输入,无论是列表,数组还是标量。
vstack
能够删除此中间“对象”图层,允许astype
。
In [1343]: np.vstack(x)
Out[1343]: array([[[[1, 2, 3]]]])