ValueError: установка элемента массива с последовательностью

Этот код:

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

Выдает это сообщение об ошибке:

 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. 

Однако этот код работает:

 import numpy as p a=range(24) b = p.reshape(a,(6,4)) c=p.array(b,dtype=p.float64)[:,2] 

Я немного переделал код, чтобы перевести его в убедительную публикацию, но он должен иметь более или менее одинаковый результат. Может ли кто-нибудь показать мне, что делать, чтобы устранить проблему в сломанном коде выше, чтобы он не выдавал сообщение об ошибке?


EDIT: я сделал команду печати, чтобы получить содержимое матрицы, и вот что она напечатала:

UnFilteredDuringExSummaryOfMeansArray:

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

Похож на 5 столбцов на 13 столбцов, хотя число строк является переменной, когда разные сценарии выполняются. С теми же самыми данными, которые я добавляю в этом.

EDIT : Однако сценарий вызывает ошибку. Поэтому я не думаю, что ваша идея объясняет проблему, которая здесь происходит. Однако, спасибо. Любые другие идеи?


Второй EDIT:

FYI, если я заменю эту проблемную строку кода:

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

вместо этого:

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

Тогда эта часть скрипта работает нормально, не выкидывая ошибку, но затем эту строку кода дальше по строке:

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

Выбрасывает эту ошибку:

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

Таким образом, вы можете видеть, что мне нужно указать тип данных, чтобы иметь возможность использовать ylim в matplotlib, но при этом указывая тип данных, возникает сообщение об ошибке, которое инициировало этот пост.

  • Использовать нотацию фрагмента с помощью collection.deque
  • Почему назначение двурядных массивов numpy не работает?
  • разрезающая разреженная (scipy) матрица
  • Что делает функция slice () в Python?
  • Нарезка словаря ключами, начинающимися с определенной строки
  • Как нарезать деку?
  • Как я могу нарезать каждый элемент массива numpy строк?
  • Список разрезов внутри метода (Python 3)
  • One Solution collect form web for “ValueError: установка элемента массива с последовательностью”

    Из кода, который вы нам показали, единственное, что мы можем сказать, это то, что вы пытаетесь создать массив из списка, который не имеет форму многомерного массива. Например

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

    или

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

    это сообщение об ошибке, потому что форма входного списка не является (обобщенным) «ящиком», который может быть превращен в многомерный массив. Поэтому, вероятно, UnFilteredDuringExSummaryOfMeansArray содержит последовательности разной длины.

    Изменить : Другая возможная причина для этого сообщения об ошибке заключается в использовании строки в качестве элемента массива типа float :

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

    Это то, что вы пытаетесь в соответствии с вашими изменениями. Если вы действительно хотите иметь массив NumPy, содержащий как строки, так и float, вы можете использовать object dtype, который позволяет массиву содержать произвольные объекты Python:

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

    Не зная, что сделает ваш код, я не могу судить, это то, что вы хотите.

    Python - лучший язык программирования в мире.