Bu Python kodu:
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()
Bu hata mesajını atar:
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.
Hata mesajı vermeyi durdurması için yukarıdaki bozuk koddaki sorunu düzeltmek için ne yapmam gerektiğini gösterebilir misiniz?
EDIT: Matrisin içeriğini almak için bir print komutu verdim ve bu çıktıyı aldım:
UnFilteredDuringExSummaryOfMeansArray'dir:
[['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]]
Bana 5 satıra 13 sütunlu bir matris gibi göründü, ancak farklı veriler komut dosyasında çalıştırıldığında satır sayısı değişkenlik gösteriyor. Buna eklediğim aynı verilerle.
EDIT 2: Ancak, komut dosyası bir hata veriyor. Bu yüzden fikrinizin burada meydana gelen sorunu açıkladığını düşünmüyorum. Yine de teşekkür ederim. Başka bir fikriniz var mı?
EDIT 3:
Bilginize, eğer bu sorunlu kod satırını değiştirirsem:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
bunun yerine bununla:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Daha sonra kodun o bölümü hata vermeden sorunsuz çalışır, ancak daha sonra bu kod satırı satırın ilerisinde:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
Bu hatayı atar:
File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type
Gördüğünüz gibi, matplotlib'de ylim'i kullanabilmek için veri türünü belirtmem gerekiyor, ancak veri türünü belirtmek bu yazıyı başlatan hata mesajını veriyor.
Bize gösterdiğiniz koddan söyleyebileceğimiz tek şey, çok boyutlu bir dizi gibi şekillendirilmemiş bir listeden bir dizi oluşturmaya çalıştığınızdır. Örneğin
numpy.array([[1,2], [2, 3, 4]])
veya
numpy.array([[1,2], [2, [3, 4]]])
bu hata mesajını verecektir, çünkü girdi listesinin şekli çok boyutlu bir diziye dönüştürülebilen (genelleştirilmiş) bir "kutu" değildir. Yani muhtemelen UnFilteredDuringExSummaryOfMeansArray
farklı uzunluklarda diziler içerir.
Edit: Bu hata mesajının bir diğer olası nedeni, float
türündeki bir dizide eleman olarak bir dize kullanmaya çalışmaktır:
numpy.array([1.2, "abc"], dtype=float)
Düzenlemenize göre denediğiniz şey bu. Eğer gerçekten hem string hem de float içeren bir NumPy dizisine sahip olmak istiyorsanız, dizinin keyfi Python nesnelerini tutmasını sağlayan dtype object
kullanabilirsiniz:
numpy.array([1.2, "abc"], dtype=object)
Kodunuzun neyi başaracağını bilmeden, istediğinizin bu olup olmadığına karar veremem.
Python ValueError:
ValueError: setting an array element with a sequence.
Tam olarak söylediği şey anlamına gelir, bir dizi sayıyı tek bir sayı yuvasına sıkıştırmaya çalışıyorsunuz. Çeşitli koşullar altında atılabilir.
1. Bir python tuple veya listesini bir numpy dizi elemanı olarak yorumlanmak üzere ilettiğinizde:
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. Bir numpy dizi uzunluğunu > 1 bir numpy dizi elemanına sıkıştırmaya çalışarak:
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
Bir numpy dizisi oluşturuluyor ve numpy, çok değerli tuple'ları veya dizileri tek eleman yuvalarına nasıl sıkıştıracağını bilmiyor. Ona verdiğiniz her şeyin tek bir sayıya değerlendirilmesini bekler, eğer değerlendirilmezse, Numpy bir dizi elemanını bir dizi ile nasıl ayarlayacağını bilmediğini söyler.
Benim durumumda sorun başkaydı. İnt listelerini diziye dönüştürmeye çalışıyordum. Sorun, diğerlerinden farklı uzunlukta bir liste olmasıydı. Eğer bunu kanıtlamak istiyorsanız, yapmalısınız:
print([i for i,x in enumerate(list) if len(x) != 560])
Benim durumumda, uzunluk referansı 560 idi.