ValueError: ustawianie elementu tablicy z sekwencją
Ten kod Pythona:
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()
Wyświetla 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 zrobić, aby rozwiązać problem w powyższym uszkodzonym kodzie, aby przestał wyświetlać komunikat o błędzie?
EDIT: Zrobiłem polecenie drukowania, aby uzyskać zawartość matrycy, i to jest to, co wydrukowało:
Unfilteredduringexsummary of Meansarray 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 jak macierz 5 wierszy na 13 kolumn, choć liczba rows jest zmienna, gdy różne dane są uruchamiane przez skrypt. Z tymi samymi danymi, które dodaję w tym.
edytuj 2: jednak skrypt wyrzuca błąd. Więc nie sądzę, że twój pomysł wyjaśnia problem, który się tutaj dzieje. Ale dziękuję. Jakieś inne pomysły?
Edytuj 3:
Dla twojej wiadomości, Jeśli podmienię ten problemowy wiersz kodu:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
Z tym zamiast:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Wtedy ta sekcja skryptu działa dobrze bez rzucania błędu, ale potem ta linia kodu dalej w dół linii:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
Wyrzuca 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
Więc widać, że muszę określić typ danych, aby móc używać ylim w matplotlib, ale jednak określenie typu danych jest wyświetlanie komunikatu o błędzie, który zainicjował ten post.
5 answers
Z kodu, który nam pokazałeś, możemy tylko powiedzieć, że próbujesz utworzyć tablicę z listy, która nie ma kształtu wielowymiarowej tablicy. Na przykład
numpy.array([[1,2], [2, 3, 4]])
Lub
numpy.array([[1,2], [2, [3, 4]]])
Wyświetli ten Komunikat o błędzie, ponieważ kształt listy wejściowej nie jest (uogólnionym) "pudełkiem", które można przekształcić w wielowymiarową tablicę. Więc prawdopodobnie UnFilteredDuringExSummaryOfMeansArray
zawiera sekwencje o różnej długości.
Edit : inną możliwą przyczyną tego komunikatu o błędzie jest próba użycia ciągu znaków jako elementu w tablicy typu float
:
numpy.array([1.2, "abc"], dtype=float)
To jest to, co próbujesz zgodnie z Twoją edycją. Jeśli naprawdę chcesz mieć tablicę NumPy zawierającą zarówno ciągi znaków, jak i pływaki, możesz użyć dtype object
, który pozwala tablicy trzymać dowolne obiekty Pythona:
numpy.array([1.2, "abc"], dtype=object)
Nie wiedząc, co twój kod osiągnie, nie mogę ocenić, czy tego chcesz.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-13 22:31:15
Wartość Pythona:
ValueError: setting an array element with a sequence.
Oznacza dokładnie to, co mówi, próbujesz wcisnąć sekwencję liczb do pojedynczego gniazda liczb. Może być rzucany w różnych okolicznościach.
1. Kiedy przekazujesz krotkę lub listę Pythona do interpretacji jako element tablicy 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. W ten sposób można utworzyć tablicę numpy o długości > 1 w element tablicy 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
Tablica numpy jest tworzona, a numpy nie wie jak umieszczanie wielowartościowych krotek lub tablic w szczelinach pojedynczych elementów. Oczekuje, że cokolwiek podasz do oceny pojedynczej liczby, jeśli nie, Numpy odpowiada, że nie wie, jak ustawić element tablicy z sekwencją.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-25 05:10:46
W moim przypadku , dostałem ten błąd w Tensorflow, powodem było to, że próbowałem podać tablicę o różnej długości lub sekwencjach:
Przykład:
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)
A jeśli moja tablica to:
example_array = [[1,2,3],[1,2]]
Wtedy dostanę błąd:
ValueError: setting an array element with a sequence.
Ale jeśli zrobię padding to:
example_array = [[1,2,3],[1,2,0]]
Teraz to działa.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-02 19:27:15
W moim przypadku problem był inny. Próbowałem przekonwertować listy list int do tablicy. Problem polegał na tym, że była jedna lista o innej długości niż inne. Jeśli chcesz to udowodnić, musisz to zrobić:
print([i for i,x in enumerate(list) if len(x) != 560])
W moim przypadku długość odniesienia wynosiła 560.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-14 17:56:47
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:
out = np.empty_like(lil_img, dtype=object)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-11 06:41:41