Ce code Python:
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.
Quelqu'un peut-il 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 pour moi, bien que le nombre de lignes soit variable lorsque différentes données sont exécutées dans le script. Avec ces mêmes données que j'ajoute.
EDIT 2 : Cependant, le script génère une erreur. Je ne pense donc pas que votre idée explique le problème qui se produit ici. Merci quand même. D'autres idées?
MODIFIER 3:
FYI, 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 cette ligne de code plus loin dans la ligne:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
Lève 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 à l'origine de ce message.
Réponses:
D'après le code que vous nous avez montré, la seule chose que nous pouvons dire 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
ou
produira ce message d'erreur, car la forme de la liste d'entrée n'est pas une "boîte" (généralisée) qui peut être transformée en un tableau multidimensionnel.
UnFilteredDuringExSummaryOfMeansArray
Contient donc probablement des séquences de différentes longueurs.Edit : Une autre cause possible de ce message d'erreur est d'essayer d'utiliser une chaîne comme élément dans un tableau de type
float
:C'est ce que vous essayez selon votre modification. Si vous voulez vraiment avoir un tableau NumPy contenant à la fois des chaînes et des flottants, vous pouvez utiliser le dtype
object
, qui permet au tableau de contenir des objets Python arbitraires:Sans savoir ce que votre code doit accomplir, je ne peux pas juger si c'est ce que vous voulez.
la source
__getitem__
comme spécifié ici: github.com/numpy/numpy/issues/5100Le ValueError Python:
Cela signifie exactement ce qu'il dit, vous essayez d'entasser une séquence de nombres dans un seul emplacement numérique. Il peut être lancé dans diverses circonstances.
1. Lorsque vous transmettez un tuple ou une liste python à interpréter comme un élément de tableau numpy:
2. En essayant de regrouper une longueur de tableau numpy> 1 dans un élément de tableau numpy:
Un tableau numpy est en cours de création et numpy ne sait pas comment entasser des tuples ou des tableaux à plusieurs valeurs dans des emplacements d'élément unique. Il s'attend à ce que tout ce que vous lui donnez soit évalué à un seul nombre, si ce n'est pas le cas, Numpy répond qu'il ne sait pas comment définir un élément de tableau avec une séquence.
la source
Dans mon cas, j'ai eu cette erreur dans Tensorflow, la raison était que j'essayais d'alimenter un tableau avec une longueur ou des séquences différentes:
exemple :
Et si mon tableau est:
Ensuite, j'obtiendrai une erreur:
mais si je fais du rembourrage alors:
Maintenant ça marche.
la source
pour ceux qui ont des problèmes avec des problèmes similaires dans Numpy, une solution très simple serait:
définition
dtype=object
lors de la définition d'un tableau pour lui attribuer des valeurs. par exemple:la source
Edit
partie de la réponse acceptée.Dans mon cas, le problème en était un autre. J'essayais de convertir des listes de listes d'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:
Dans mon cas, la longueur de référence était de 560.
la source
Dans mon cas, le problème était avec un nuage de points d'une dataframe X []:
la source
Lorsque la forme n'est pas régulière ou que les éléments ont des types de données différents, l'
dtype
argument passé à np.array uniquement peut l'êtreobject
.''
la source