This Python code:
import numpy as p
def firstfunction():
UnFilteredDuringExSummaryOfMeansArray = []
MeanOutputHeader=['TestID','ConditionName','FilterType','RRMean','HRMean','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[3], myMeans[4], myMeans[6], myMeans[9]
, myMeans[10], myMeans[11], myMeans[12], myMeans[13], myMeans[14], myMeans[15]]
UnFilteredDuringExSummaryOfMeansArray.append(conditionMeansArray)
secondfunction(UnFilteredDuringExSummaryOfMeansArray)
return
def secondfunction(UnFilteredDuringExSummaryOfMeansArray):
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
return
firstfunction()
Lance ce message d'erreur:
File "mypath\mypythonscript.py", line 3484, in secondfunction
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
ValueError: setting an array element with a sequence.
Est-ce que n'importe qui peut me montrer quoi faire pour résoudre le problème dans le code cassé ci-dessus afin qu'il cesse de lancer un message d'erreur?
EDIT: J'ai fait une commande d'impression pour obtenir le contenu de la matrice, et voici ce qu'elle a imprimé:
UnFilteredDuringExSummaryOfMeansArray est:
[['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]]
Cela ressemble à une matrice de 5 lignes par 13 colonnes, bien que le nombre de lignes soit variable lorsque différentes données sont exécutées via le script. Avec ces mêmes données que j'ajoute à cela.
EDIT 2 : Cependant, le script génère une erreur. Donc, je ne pense pas que votre idée explique le problème qui se pose ici. Merci quand même. D'autres idées?
EDIT 3:
Pour votre information, si je remplace cette ligne de code problématique:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
avec ceci à la place:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Ensuite, cette section du script fonctionne correctement sans générer d'erreur, mais ensuite cette ligne de code plus loin dans la suite:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
Lance cette erreur:
File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type
Vous pouvez donc voir que je dois spécifier le type de données pour pouvoir utiliser ylim dans matplotlib, mais spécifier le type de données renvoie le message d'erreur qui a initié cette publication.
D'après le code que vous nous avez montré, la seule chose que nous puissions dire, c'est que vous essayez de créer un tableau à partir d'une liste qui n'a pas la forme d'un tableau multidimensionnel. Par exemple
numpy.array([[1,2], [2, 3, 4]])
ou
numpy.array([[1,2], [2, [3, 4]]])
générera ce message d'erreur, car la forme de la liste d'entrée n'est pas une "boîte" (généralisée) pouvant être transformée en un tableau multidimensionnel. Donc probablement UnFilteredDuringExSummaryOfMeansArray
contient des séquences de différentes longueurs.
Edit: Une autre cause possible de ce message d'erreur consiste à utiliser une chaîne en tant qu'élément d'un tableau de type float
:
numpy.array([1.2, "abc"], dtype=float)
C'est ce que vous essayez en fonction de votre modification. Si vous voulez vraiment avoir un tableau NumPy contenant à la fois des chaînes et des éléments flottants, vous pouvez utiliser le type 2 object
, qui permet au tableau de contenir des objets Python arbitraires:
numpy.array([1.2, "abc"], dtype=object)
Sans savoir ce que votre code doit accomplir, je ne peux pas juger si c'est ce que vous voulez.
Le Python ValueError:
ValueError: setting an array element with a sequence.
Cela veut dire exactement ce que ça dit, vous essayez de mettre une séquence de chiffres dans un seul numéro. Il peut être jeté dans diverses circonstances.
1. Lorsque vous passez un python tuple ou une liste à interpréter en tant qu'élément de tableau numpy:
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. En essayant de décomposer une longueur de tableau numpy> 1 dans un élément de tableau numpy:
x = np.array([1,2,3])
x[0] = np.array([4]) #good
x = np.array([1,2,3])
x[0] = np.array([4,5]) #Fail, can't convert the numpy array to fit
#into a numpy array element
Un tableau numpy est en cours de création et numpy ne sait pas comment empiler des n-uplets ou des tableaux à valeurs multiples dans des emplacements à élément unique. Numpy répond qu'il ne sait pas comment définir un élément de tableau avec une séquence.
Dans mon cas, j'ai eu cette erreur dans Tensorflow, Reason essayait d'alimenter un tableau avec une longueur ou des séquences différentes:
exemple :
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)
Et si mon tableau est:
example_array = [[1,2,3],[1,2]]
Alors j'aurai une erreur:
ValueError: setting an array element with a sequence.
mais si je fais du rembourrage alors:
example_array = [[1,2,3],[1,2,0]]
Maintenant ça marche.
Dans mon cas, le problème en était un autre. J'essayais de convertir des listes de listes de int en tableau. Le problème était qu’il y avait une liste avec une longueur différente des autres. Si vous voulez le prouver, vous devez faire:
print([i for i,x in enumerate(list) if len(x) != 560])
Dans mon cas, la référence de longueur était 560.
pour ceux qui rencontrent des problèmes similaires dans Numpy, une solution très simple serait:
définir dtype=object
lors de la définition d'un tableau pour lui attribuer des valeurs. par exemple:
out = np.empty_like(lil_img, dtype=object)
Dans mon cas, le problème était avec un diagramme de dispersion d'une base de données 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)