it-swarm.com.de

ValueError: Festlegen eines Array-Elements mit einer Sequenz

Dieser 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()

Löst diese Fehlermeldung aus:

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.

Kann mir jemand zeigen, was zu tun ist, um das Problem im oben genannten fehlerhaften Code zu beheben, sodass keine Fehlermeldung mehr ausgegeben wird?


EDIT: Ich habe einen Druckbefehl ausgeführt, um den Inhalt der Matrix abzurufen. Dies ist der Ausdruck:

UnFilteredDuringExSummaryOfMeansArray ist:

[['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]]

Sieht für mich wie eine Matrix aus 5 Zeilen und 13 Spalten aus, obwohl die Anzahl der Zeilen variabel ist, wenn verschiedene Daten durch das Skript ausgeführt werden. Mit denselben Daten, die ich hier hinzufüge.

EDIT 2 : Das Skript gibt jedoch einen Fehler aus. Ich glaube nicht, dass Ihre Idee das Problem erklärt, das hier auftritt. Trotzdem danke. Irgendwelche anderen Ideen?


EDIT 3:

Zu Ihrer Information, wenn ich diese problematische Codezeile ersetze:

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

mit diesem statt:

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

Dann funktioniert dieser Abschnitt des Skripts einwandfrei, ohne einen Fehler auszulösen, aber dann diese Codezeile weiter unten:

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

Löst diesen Fehler aus:

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

Sie sehen also, dass ich den Datentyp angeben muss, um ylim in matplotlib verwenden zu können. Wenn Sie jedoch den Datentyp angeben, wird die Fehlermeldung ausgegeben, die diesen Beitrag ausgelöst hat.

153
MedicalMath

Aus dem Code, den Sie uns gezeigt haben, können wir nur erkennen, dass Sie versuchen, ein Array aus einer Liste zu erstellen, die nicht die Form eines mehrdimensionalen Arrays hat. Zum Beispiel

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

oder

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

wird diese Fehlermeldung ausgeben, da die Form der Eingabeliste kein (verallgemeinertes) "Kästchen" ist, das in ein mehrdimensionales Array umgewandelt werden kann. Also enthält UnFilteredDuringExSummaryOfMeansArray wahrscheinlich Sequenzen unterschiedlicher Länge.

Bearbeiten: Eine weitere mögliche Ursache für diese Fehlermeldung ist der Versuch, eine Zeichenfolge als Element in einem Array vom Typ float zu verwenden:

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

Das ist es, was du gemäß deiner Bearbeitung versuchst. Wenn Sie wirklich ein NumPy-Array haben möchten, das sowohl Strings als auch Floats enthält, können Sie den dtype object verwenden, mit dem das Array beliebige Python -Objekte aufnehmen kann:

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

Ohne zu wissen, was Ihr Code erreichen soll, kann ich nicht beurteilen, ob Sie dies wünschen.

206
Sven Marnach

Der Python ValueError:

ValueError: setting an array element with a sequence.

Bedeutet genau das, was es sagt, Sie versuchen, eine Folge von Zahlen in einen einzelnen Zahlenschlitz zu stopfen. Es kann unter verschiedenen Umständen geworfen werden.

1. Wenn Sie einen python Tupel oder eine Liste übergeben, die als numpy-Array-Element interpretiert werden sollen:

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. Indem Sie versuchen, eine Numpy-Array-Länge> 1 in ein Numpy-Array-Element zu stopfen:

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

Es wird ein Numpy-Array erstellt, und Numpy weiß nicht, wie mehrwertige Tupel oder Arrays in Einzelelement-Slots gepackt werden. Er erwartet, dass alles, was Sie ihm geben, zu einer einzelnen Zahl ausgewertet wird. Andernfalls antwortet Numpy, dass er nicht weiß, wie ein Array-Element mit einer Sequenz festgelegt wird.

35
Eric Leschinski

In meinem Fall ist dieser Fehler in Tensorflow aufgetreten. Grund war, dass ich versucht habe, ein Array mit unterschiedlicher Länge oder Sequenz zu füttern:

beispiel:

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)

Und wenn mein Array ist:

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

Dann bekomme ich eine Fehlermeldung:

ValueError: setting an array element with a sequence.

aber wenn ich dann padding mache:

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

Jetzt geht es.

11
Aaditya Ura

In meinem Fall war das Problem ein anderes. Ich habe versucht, Listen von Listen von int in array umzuwandeln. Das Problem war, dass es eine Liste mit einer anderen Länge als andere gab. Wenn Sie es beweisen möchten, müssen Sie Folgendes tun:

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

In meinem Fall betrug der Längenbezug 560.

4

für diejenigen, die Probleme mit ähnlichen Problemen in Numpy haben, wäre eine sehr einfache Lösung:

definieren von dtype=object, wenn ein Array zum Zuweisen von Werten definiert wird. zum Beispiel:

out = np.empty_like(lil_img, dtype=object)
4
Adam Liu

In meinem Fall war das Problem mit einem Streudiagramm eines Datenrahmens 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)
2
Max Kleiner