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, но при этом указание типа данных вызывает сообщение об ошибке, с которого начался этот пост.

Решение

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

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

или

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

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

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

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

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

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

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

Комментарии (4)

Ошибка Python ValueError:.

ValueError: setting an array element with a sequence.

Означает именно то, что написано: вы пытаетесь впихнуть последовательность чисел в одно числовое гнездо. Она может возникнуть при различных обстоятельствах.

1. Когда вы передаете кортеж или список python для интерпретации в качестве элемента массива 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. При попытке запихнуть массив numpy длиной > 1 в элемент массива 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

Создается массив numpy, а numpy не знает, как запихнуть многозначные кортежи или массивы в слоты с одним элементом. Он ожидает, что все, что вы ему дадите, будет оценено в одно число, если это не так, Numpy отвечает, что не знает, как задать элемент массива последовательностью.

Комментарии (0)

В моем случае , я получил эту ошибку в Tensorflow , почему я пытаюсь накормить массив с различной длиной или их последовательности :

пример :

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)

И если мой массив :

example_array = [[1,2,3],[1,2]]

Затем я получаю ошибку :

ValueError: setting an array element with a sequence.

но если я сделаю отступ после :

example_array = [[1,2,3],[1,2,0]]

Теперь это's работает.

Комментарии (2)

В моем случае проблема заключалась в другом. Я пытался преобразовать списки списков int в массив. Проблема заключалась в том, что был один список, длина которого отличалась от других. Если вы хотите доказать это, вы должны сделать:

print([i for i,x in enumerate(list) if len(x) != 560])

В моем случае ссылка на длину была 560.

Комментарии (0)

для тех, кто испытывает проблемы с аналогичными проблемами в пакете numpy, очень простое решение:

определение dtype=объект при определении массива для присвоения значений его. например:

out = np.empty_like(lil_img, dtype=object)
Комментарии (1)

В моем случае, проблема была с точечной диаграммы таблицу данных х[]:

ax.scatter(X[:,0],X[:,1],c=colors,    
       cmap=CMAP, edgecolor='k', s=40)  #c=y[:,0],

#ValueError: setting an array element with a sequence.
#Fix with .toarray():
colors = 'br'
y = label_binarize(y, classes=['Irrelevant','Relevant'])
ax.scatter(X[:,0].toarray(),X[:,1].toarray(),c=colors,   
       cmap=CMAP, edgecolor='k', s=40)
Комментарии (0)