# ValueError: setting an array element with a sequence

Posted on

Solving problem is about exposing yourself to as many situations as possible like ValueError: setting an array element with a sequence and practice these strategies over and over. With time, it becomes second nature and a natural way you approach any problems in general. Big or small, always start with a plan, use other strategies mentioned here till you are confident and ready to code the solution.
In this post, my aim is to share an overview the topic about ValueError: setting an array element with a sequence, which can be followed any time. Take easy to follow this discuss.

ValueError: setting an array element with a sequence

This Python code:

``````import numpy as p
def firstfunction():
UnFilteredDuringExSummaryOfMeansArray = []
'dZdtMaxVoltageMean','BZMean','ZXMean','LVETMean','Z0Mean',
'StrokeVolumeMean','CardiacOutputMean','VelocityIndexMean']
dataMatrix = BeatByBeatMatrixOfMatrices[column]
roughTrimmedMatrix = p.array(dataMatrix[1:,1:17])
trimmedMatrix = p.array(roughTrimmedMatrix,dtype=p.float64)  #ERROR THROWN HERE
myMeans = p.mean(trimmedMatrix,axis=0,dtype=p.float64)
conditionMeansArray = [TestID,testCondition,'UnfilteredBefore',myMeans, myMeans,
myMeans, myMeans, myMeans, myMeans, myMeans,
myMeans, myMeans, myMeans]
UnFilteredDuringExSummaryOfMeansArray.append(conditionMeansArray)
secondfunction(UnFilteredDuringExSummaryOfMeansArray)
return
def secondfunction(UnFilteredDuringExSummaryOfMeansArray):
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
return
firstfunction()
``````

Throws this error message:

``````File "mypathmypythonscript.py", line 3484, in secondfunction
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
ValueError: setting an array element with a sequence.
``````

Can anyone show me what to do to fix the problem in the broken code above so that it stops throwing an error message?

EDIT:
I did a print command to get the contents of the matrix, and this is what it printed out:

UnFilteredDuringExSummaryOfMeansArray is:

``````[['TestID', 'ConditionName', 'FilterType', 'RRMean', 'HRMean', 'dZdtMaxVoltageMean', 'BZMean', 'ZXMean', 'LVETMean', 'Z0Mean', 'StrokeVolumeMean', 'CardiacOutputMean', 'VelocityIndexMean'],
[u'HF101710', 'PreEx10SecondsBEFORE', 'UnfilteredBefore', 0.90670000000000006, 66.257731979420001, 1.8305673000000002, 0.11750000000000001, 0.15120546389880002, 0.26870546389879996, 27.628261216480002, 86.944190346160013, 5.767261352345999, 0.066259118585869997],
[u'HF101710', '25W10SecondsBEFORE', 'UnfilteredBefore', 0.68478571428571422, 87.727887206978565, 2.2965444125714285, 0.099642857142857144, 0.14952476549885715, 0.24916762264164286, 27.010483303721429, 103.5237336525, 9.0682762747642869, 0.085022572648242867],
[u'HF101710', '50W10SecondsBEFORE', 'UnfilteredBefore', 0.54188235294117659, 110.74841107829413, 2.6719262705882354, 0.077705882352917643, 0.15051306356552943, 0.2282189459185294, 26.768787504858825, 111.22827075238826, 12.329456404418824, 0.099814258468417641],
[u'HF101710', '75W10SecondsBEFORE', 'UnfilteredBefore', 0.4561904761904762, 131.52996981880955, 3.1818159523809522, 0.074714285714290493, 0.13459344175047619, 0.20930772746485715, 26.391156337028569, 123.27387909873812, 16.214243779323812, 0.1205685359981619]]
``````

Looks like a 5 row by 13 column matrix to me, though the number of rows is variable when different data are run through the script. With this same data that I am adding in this.

EDIT 2: However, the script is throwing an error. So I do not think that your idea explains the problem that is happening here. Thank you, though. Any other ideas?

EDIT 3:

FYI, if I replace this problem line of code:

``````    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
``````

``````    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
``````

Then that section of the script works fine without throwing an error, but then this line of code further down the line:

``````p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
``````

Throws this error:

``````File "mypathmypythonscript.py", line 3631, in CreateSummaryGraphics
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type
``````

So you can see that I need to specify the data type in order to be able to use ylim in matplotlib, but yet specifying the data type is throwing the error message that initiated this post.

From the code you showed us, the only thing we can tell is that you are trying to create an array from a list that isn’t shaped like a multi-dimensional array. For example

``````numpy.array([[1,2], [2, 3, 4]])
``````

or

``````numpy.array([[1,2], [2, [3, 4]]])
``````

will yield this error message, because the shape of the input list isn’t a (generalised) “box” that can be turned into a multidimensional array. So probably `UnFilteredDuringExSummaryOfMeansArray` contains sequences of different lengths.

Edit: Another possible cause for this error message is trying to use a string as an element in an array of type `float`:

``````numpy.array([1.2, "abc"], dtype=float)
``````

That is what you are trying according to your edit. If you really want to have a NumPy array containing both strings and floats, you could use the dtype `object`, which enables the array to hold arbitrary Python objects:

``````numpy.array([1.2, "abc"], dtype=object)
``````

Without knowing what your code shall accomplish, I can’t judge if this is what you want.

The Python ValueError:

``````ValueError: setting an array element with a sequence.
``````

Means exactly what it says, you’re trying to cram a sequence of numbers into a single number slot. It can be thrown under various circumstances.

1. When you pass a python tuple or list to be interpreted as a numpy array element:

``````import numpy
numpy.array([1,2,3])               #good
numpy.array([1, (2,3)])            #Fail, can't convert a tuple into a numpy
#array element
numpy.mean([5,(6+7)])              #good
numpy.mean([5,tuple(range(2))])    #Fail, can't convert a tuple into a numpy
#array element
def foo():
return 3
numpy.array([2, foo()])            #good
def foo():
return [3,4]
numpy.array([2, foo()])            #Fail, can't convert a list into a numpy
#array element
``````

2. By trying to cram a numpy array length > 1 into a numpy array element:

``````x = np.array([1,2,3])
x = np.array()         #good
x = np.array([1,2,3])
x = np.array([4,5])       #Fail, can't convert the numpy array to fit
#into a numpy array element
``````

A numpy array is being created, and numpy doesn’t know how to cram multivalued tuples or arrays into single element slots. It expects whatever you give it to evaluate to a single number, if it doesn’t, Numpy responds that it doesn’t know how to set an array element with a sequence.

In my case , I got this Error in Tensorflow , Reason was i was trying to feed a array with different length or sequences :

example :

``````import tensorflow as tf
input_x = tf.placeholder(tf.int32,[None,None])
word_embedding = tf.get_variable('embeddin',shape=[len(vocab_),110],dtype=tf.float32,initializer=tf.random_uniform_initializer(-0.01,0.01))
embedding_look=tf.nn.embedding_lookup(word_embedding,input_x)
with tf.Session() as tt:
tt.run(tf.global_variables_initializer())
a,b=tt.run([word_embedding,embedding_look],feed_dict={input_x:example_array})
print(b)
``````

And if my array is :

``````example_array = [[1,2,3],[1,2]]
``````

Then i will get error :

``````ValueError: setting an array element with a sequence.
``````

but if i do padding then :

``````example_array = [[1,2,3],[1,2,0]]
``````

Now it’s working.

for those who are having trouble with similar problems in Numpy, a very simple solution would be:

defining `dtype=object` when defining an array for assigning values to it. for instance:

``````out = np.empty_like(lil_img, dtype=object)
``````

In my case, the problem was another. I was trying convert lists of lists of int to array. The problem was that there was one list with a different length than others. If you want to prove it, you must do:

``````print([i for i,x in enumerate(list) if len(x) != 560])
``````

In my case, the length reference was 560.

In my case, the problem was with a scatterplot of a dataframe X[]:

``````ax.scatter(X[:,0],X[:,1],c=colors,
cmap=CMAP, edgecolor='k', s=40)  #c=y[:,0],
#ValueError: setting an array element with a sequence.
#Fix with .toarray():
colors = 'br'
y = label_binarize(y, classes=['Irrelevant','Relevant'])
ax.scatter(X[:,0].toarray(),X[:,1].toarray(),c=colors,
cmap=CMAP, edgecolor='k', s=40)
``````

When the shape is not regular or the elements have different data types, the `dtype` argument passed to np.array only can be `object`.

``````import numpy as np
# arr1 = np.array([[10, 20.], , ], dtype=np.float32)  # error
arr2 = np.array([[10, 20.], , ])  # OK, and the dtype is object
arr3 = np.array([[10, 20.], 'hello'])     # OK, and the dtype is also object
``````

In my case, I had a nested list as the series that I wanted to use as an input.

First check: If

``````df['nestedList']
``````

outputs a list like `[1,2,3]`, you have a nested list.

Then check if you still get the error when changing to input `df['nestedList']`.

Then your next step is probably to concatenate all nested lists into one unnested list, using

``````[item for sublist in df['nestedList'] for item in sublist]
``````

This flattening of the nested list is borrowed from How to make a flat list out of list of lists?.