Ten kod 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()
Zgłasza ten komunikat o błędzie:
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.
Czy ktoś może mi pokazać, co mam zrobić, aby rozwiązać problem z uszkodzonego kodu powyżej, aby przestał wyświetlać komunikat o błędzie?
EDYCJA: Zrobiłem polecenie drukowania, aby uzyskać zawartość matrycy, i oto, co wydrukowało:
UnFilteredDuringExSummaryOfMeansArray to:
[['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]]
Wygląda mi na matrycę 5 wierszy na 13 kolumn, chociaż liczba wierszy jest zmienna, gdy różne dane są uruchamiane przez skrypt. Z tymi samymi danymi, które dodam w tym.
EDYCJA 2 : Jednak skrypt zgłasza błąd. Nie sądzę więc, aby twój pomysł wyjaśniał występujący tutaj problem. Ale dziękuję. Jakieś inne pomysły?
EDYCJA 3:
Do Twojej wiadomości, jeśli zastąpię ten wiersz kodu problemu:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
z tym zamiast tego:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Następnie ta sekcja skryptu działa dobrze bez zgłaszania błędu, ale następnie ten wiersz kodu znajduje się poniżej:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
Zgłasza ten błąd:
File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type
Widać więc, że muszę określić typ danych, aby móc używać ylim w matplotlib, ale określenie typu danych powoduje wyświetlenie komunikatu o błędzie, który zainicjował ten post.
Odpowiedzi:
Z kodu, który nam pokazałeś, jedyne, co możemy powiedzieć, to to, że próbujesz utworzyć tablicę z listy, która nie ma kształtu wielowymiarowego. Na przykład
lub
wyświetli ten komunikat o błędzie, ponieważ kształt listy danych wejściowych nie jest (uogólnionym) „pudełkiem”, które można przekształcić w tablicę wielowymiarową. Prawdopodobnie
UnFilteredDuringExSummaryOfMeansArray
zawiera sekwencje o różnych długościach.Edycja : Inną możliwą przyczyną tego komunikatu o błędzie jest próba użycia ciągu jako elementu w tablicy typu
float
:Właśnie tego próbujesz zgodnie ze swoją edycją. Jeśli naprawdę chcesz mieć tablicę NumPy zawierającą zarówno łańcuchy, jak i zmiennoprzecinkowe, możesz użyć dtype
object
, który umożliwia tablicy przechowywanie dowolnych obiektów Python:Nie wiedząc, co osiągnie Twój kod, nie mogę ocenić, czy tego właśnie chcesz.
źródło
__getitem__
tak, jak określono tutaj: github.com/numpy/numpy/issues/5100Python ValueError:
Oznacza to dokładnie to, co mówi, próbujesz wcisnąć sekwencję liczb w pojedynczy przedział liczbowy. Może być rzucany w różnych okolicznościach.
1. Gdy przekazujesz krotkę lub listę pythonową, które mają być interpretowane jako element tablicy numpy:
2. Próbując wcisnąć tablicę numpy o długości> 1 w element tablicy numpy:
Tworzona jest tablica numpy, a numpy nie wie, jak wcisnąć krotki lub tablice wielowartościowe w gniazda pojedynczych elementów. Oczekuje, że wszystko, co podasz, zostanie ocenione na jedną liczbę, jeśli nie, Numpy odpowiada, że nie wie, jak ustawić element tablicy za pomocą sekwencji.
źródło
W moim przypadku wystąpił błąd w Tensorflow. Przyczyną było, że próbowałem nakarmić tablicę o innej długości lub sekwencji:
przykład:
A jeśli moja tablica to:
Wtedy dostanę błąd:
ale jeśli zrobię padding, wtedy:
Teraz działa.
źródło
dla tych, którzy mają problemy z podobnymi problemami w Numpy, bardzo prostym rozwiązaniem byłoby:
definiowanie
dtype=object
podczas definiowania tablicy do przypisywania jej wartości. na przykład:źródło
Edit
części przyjętej odpowiedzi?W moim przypadku problem był inny. Próbowałem przekonwertować listy list int na tablicę. Problem polegał na tym, że była jedna lista o innej długości niż inne. Jeśli chcesz to udowodnić, musisz:
W moim przypadku referencyjna długość wynosiła 560.
źródło
W moim przypadku problemem był wykres rozrzutu ramki danych X []:
źródło
Gdy kształt nie jest regularny lub elementy mają różne typy danych,
dtype
argument przekazywany tylko do np.array może byćobject
.``
źródło