ValueError: установка элемента массива с помощью последовательности
Этот код 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()
Выбрасывает это сообщение об ошибке:
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.
Может ли кто-нибудь показать мне, что нужно сделать, чтобы исправить проблему в сломанном коде выше, чтобы он перестал выбрасывать сообщение об ошибке?
EDIT: Я выполнил команду print, чтобы получить содержимое матрицы, и вот что она вывела:
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]]
Для меня это выглядит как матрица из 5 строк по 13 столбцов, хотя количество строк меняется при прогоне различных данных через скрипт. С этими же данными я добавляю следующее.
РЕДАКТ 2: Однако скрипт выдает ошибку. Поэтому я не думаю, что ваша идея объясняет проблему, которая здесь возникает. Тем не менее, спасибо. Есть еще какие-нибудь идеи?
EDIT 3:
К вашему сведению, если я заменю эту проблемную строку кода:
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, но при этом указание типа данных вызывает сообщение об ошибке, с которого начался этот пост.
Из кода, который вы показали нам, единственное, что мы можем сказать, это то, что вы пытаетесь создать массив из списка, который имеет форму многомерного массива. Например
или
выдаст это сообщение об ошибке, потому что форма входного списка не является (обобщенным) "ящиком", который можно превратить в многомерный массив. Поэтому, вероятно,
UnFilteredDuringExSummaryOfMeansArray
содержит последовательности разной длины.Редактирование: Другой возможной причиной появления этого сообщения об ошибке является попытка использовать строку в качестве элемента в массиве типа
float
:Именно это вы и пытаетесь сделать, судя по вашей правке. Если вы действительно хотите иметь массив NumPy, содержащий и строки, и плавающие числа, вы можете использовать dtype
object
, который позволяет массиву содержать произвольные объекты Python:Не зная, что должно получиться в вашем коде, я не могу судить, то ли это, что вы хотите.
Ошибка Python ValueError:.
Означает именно то, что написано: вы пытаетесь впихнуть последовательность чисел в одно числовое гнездо. Она может возникнуть при различных обстоятельствах.
1. Когда вы передаете кортеж или список python для интерпретации в качестве элемента массива numpy:.
2. При попытке запихнуть массив numpy длиной > 1 в элемент массива numpy:.
Создается массив numpy, а numpy не знает, как запихнуть многозначные кортежи или массивы в слоты с одним элементом. Он ожидает, что все, что вы ему дадите, будет оценено в одно число, если это не так, Numpy отвечает, что не знает, как задать элемент массива последовательностью.
В моем случае , я получил эту ошибку в Tensorflow , почему я пытаюсь накормить массив с различной длиной или их последовательности :
пример :
И если мой массив :
Затем я получаю ошибку :
но если я сделаю отступ после :
Теперь это's работает.
В моем случае проблема заключалась в другом. Я пытался преобразовать списки списков int в массив. Проблема заключалась в том, что был один список, длина которого отличалась от других. Если вы хотите доказать это, вы должны сделать:
В моем случае ссылка на длину была 560.
для тех, кто испытывает проблемы с аналогичными проблемами в пакете numpy, очень простое решение:
определение
dtype=объект
при определении массива для присвоения значений его. например:В моем случае, проблема была с точечной диаграммы таблицу данных х[]: