Python - ValueError:使用序列设置数组元素

时间:2018-01-18 23:39:35

标签: python arrays list numpy

我有一个如下所示的列表:

[array(46), array(0.09), array(5.3), array(4), array(23), array(33), array([0, 1])]

当我尝试保存它时,如下:

np.save('model.npy', data)

我收到以下错误:

ValueError: setting an array element with a sequence.

导致错误的原因是什么?是array([0, 1]吗?或者关于如何格式化列表的事情。

感谢。

2 个答案:

答案 0 :(得分:1)

np.save保存数组,而不是列表。所以它必须先将列表转换为数组。但是当我这样做时:

In [192]: array=np.array
In [193]: data = np.array([array(797.41993), array(0.5880978458210907), array(0.606072
     ...: 7759272153), array(0.590397955349836), array(0.5688937568615196), array(0.56
     ...: 70561030951616), array([0, 1])])
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-193-390218c41b83> in <module>()
----> 1 data = np.array([array(797.41993), array(0.5880978458210907), array(0.6060727759272153), array(0.590397955349836), array(0.5688937568615196), array(0.5670561030951616), array([0, 1])])

ValueError: setting an array element with a sequence.

所有子数组都有单个项目,但是最后一个有2.如果我删除它,它可以创建一个数组。

In [194]: data = np.array([array(797.41993), array(0.5880978458210907), array(0.606072
     ...: 7759272153), array(0.590397955349836), array(0.5688937568615196), array(0.56
     ...: 70561030951616)])
In [195]: data
Out[195]: 
array([  7.97419930e+02,   5.88097846e-01,   6.06072776e-01,
         5.90397955e-01,   5.68893757e-01,   5.67056103e-01])

np.array(...)尝试创建尽可能高的维数组。如果元素的大小不同,则无法做到这一点。在某些情况下,它将创建一个对象dtype数组。但在这方面它引发了一个错误。

首先使用1d项创建对象dtype:

In [196]: data = np.array([array([0, 1]), array(797.41993), array(0.5880978458210907),
     ...:  array(0.6060727759272153), array(0.590397955349836), array(0.56889375686151
     ...: 96), array(0.5670561030951616)])
In [197]: data
Out[197]: 
array([array([0, 1]), array(797.41993), array(0.5880978458210907),
       array(0.6060727759272153), array(0.590397955349836),
       array(0.5688937568615196), array(0.5670561030951616)], dtype=object)

或者hstack为@wim建议:

In [198]: data = np.hstack([array(797.41993), array(0.5880978458210907), array(0.60607
     ...: 27759272153), array(0.590397955349836), array(0.5688937568615196), array(0.5
     ...: 670561030951616), array([0, 1])])
In [199]: data
Out[199]: 
array([  7.97419930e+02,   5.88097846e-01,   6.06072776e-01,
         5.90397955e-01,   5.68893757e-01,   5.67056103e-01,
         0.00000000e+00,   1.00000000e+00])

答案 1 :(得分:0)

ValueError: setting an array element with a sequence

我能找到的这个错误的最佳解释是here

  

如果我们尝试将某些内容写入setting an array element with a sequence的单个地点(array单元格,matrix条目)并且此内容为,则会发生错误array不是标量值。

发生这种情况

  • 当您尝试将数组中的单个值设置为某种容器对象(数组,元组,列表等)时
  • 当你试图处理&#34;衣衫褴褛的&#34;数据类型(即不是n-d矩形的结构)使用设计为仅在数组上使用的方法(几乎是numpy中的任何内容)

在这种情况下,np.save仅适用于单个数组,因此首先在输入中应用asanyarray()。这可以看到七个&#34;事物的列表。其中第一个是float,并试图将它们装入arr.shape = (7,), arr.dtype = float数组。当它到达最后一个元素时,它会尝试设置arr[6] = array([0, 1])并抛出错误。