ValueError: een array-element instellen met een reeks

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

Geeft deze foutmelding:

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.

Kan iemand me laten zien wat ik moet doen om het probleem in de bovenstaande code op te lossen, zodat er geen foutmelding meer wordt weergegeven?


BEWERKEN:
Ik heb een afdrukopdracht uitgevoerd om de inhoud van de matrix te krijgen, en dit is wat het afdrukte:

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

Het lijkt mij een matrix van 5 rijen bij 13 kolommen, hoewel het aantal rijen variabel is wanneer verschillende gegevens door het script worden uitgevoerd. Met dezelfde gegevens die ik hieraan toevoeg.

EDIT 2: het script geeft echter een fout. Dus ik denk niet dat uw idee het probleem verklaart dat hier gebeurt. Toch bedankt. Nog andere ideeën?


BEWERK 3:

Ter info, als ik deze probleemregel met code vervang:

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

in plaats daarvan:

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

Dan werkt dat gedeelte van het script prima zonder een fout te veroorzaken, maar dan deze regel code verderop:

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

Geeft deze fout:

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

Je kunt dus zien dat ik het gegevenstype moet specificeren om ylim in matplotlib te kunnen gebruiken, maar toch geeft het specificeren van het gegevenstype de foutmelding die dit bericht heeft geïnitieerd.


Antwoord 1, autoriteit 100%

Uit de code die je ons hebt laten zien, kunnen we alleen zien dat je een array probeert te maken van een lijst die niet de vorm heeft van een multidimensionale array. Bijvoorbeeld

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

of

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

geeft deze foutmelding, omdat de vorm van de invoerlijst geen (algemene) “box” is die kan worden omgezet in een multidimensionale array. Dus waarschijnlijk bevat UnFilteredDuringExSummaryOfMeansArray reeksen van verschillende lengtes.

Bewerken: een andere mogelijke oorzaak voor deze foutmelding is het proberen om een ​​string te gebruiken als een element in een array van het type float:

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

Dat is wat u probeert volgens uw bewerking. Als je echt een NumPy-array wilt hebben die zowel strings als floats bevat, kun je het dtype object gebruiken, waarmee de array willekeurige Python-objecten kan bevatten:

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

Zonder te weten wat je code zal bereiken, kan ik niet beoordelen of dit is wat je wilt.


Antwoord 2, autoriteit 23%

De Python ValueError:

ValueError: setting an array element with a sequence.

Betekent precies wat het zegt, je probeert een reeks getallen in een enkel nummervak ​​te proppen. Het kan onder verschillende omstandigheden worden gegooid.

1. Wanneer u een python-tuple of lijst doorgeeft om te worden geïnterpreteerd als een 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. Door te proberen een numpy array-lengte > 1 in een numpy array-element te proppen:

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

Er wordt een numpy-array gemaakt en numpy weet niet hoe tupels of arrays met meerdere waarden in slots met één element moeten worden gepropt. Het verwacht dat wat je het ook geeft om te evalueren tot een enkel getal, als dat niet het geval is, antwoordt Numpy dat het niet weet hoe een array-element met een reeks moet worden ingesteld.


Antwoord 3, autoriteit 7%

In mijn geval kreeg ik deze fout in Tensorflow, de reden was dat ik een array probeerde te voeren met verschillende lengtes of reeksen:

voorbeeld:

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)

En als mijn array is:

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

Dan krijg ik een foutmelding:

ValueError: setting an array element with a sequence.

maar als ik opvulling doe dan :

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

Nu werkt het.


Antwoord 4, autoriteit 3%

voor degenen die problemen hebben met soortgelijke problemen in Numpy, zou een heel eenvoudige oplossing zijn:

definiëren van dtype=object bij het definiëren van een array om er waarden aan toe te kennen. bijvoorbeeld:

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

Antwoord 5, autoriteit 2%

In mijn geval was het probleem een ​​ander probleem. Ik probeerde lijsten met lijsten van int naar array te converteren. Het probleem was dat er één lijst was met een andere lengte dan andere. Als je het wilt bewijzen, moet je het volgende doen:

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

In mijn geval was de lengtereferentie 560.


Antwoord 6

In mijn geval was het probleem met een scatterplot van een 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)

Antwoord 7

In mijn geval had ik een geneste lijst als serie die ik als invoer wilde gebruiken.

Eerste controle: als

df['nestedList'][0]

voert een lijst uit zoals [1,2,3], je hebt een geneste lijst.

Controleer dan of je nog steeds de foutmelding krijgt bij het overschakelen naar invoer df['nestedList'][0].

Dan is uw volgende stap waarschijnlijk om alle geneste lijsten samen te voegen tot één niet-geneste lijst, met behulp van

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

Deze afvlakking van de geneste lijst is ontleend aan Hoe maak je een platte lijst van een lijst met lijsten?.


Antwoord 8

Als de vorm niet regelmatig is of de elementen verschillende gegevenstypen hebben, kan het argument dtype dat aan np.array wordt doorgegeven alleen object zijn.

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

8 − 7 =

Other episodes