ValueError : 시퀀스로 배열 요소 설정


183

이 파이썬 코드 :

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.

누구든지 위의 깨진 코드에서 문제를 해결하여 오류 메시지가 표시되는 것을 막기 위해 어떻게해야하는지 보여줄 수 있습니까?


편집 : 매트릭스의 내용을 얻기 위해 인쇄 명령을 수행했으며 이것이 인쇄 된 것입니다.

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 행 x 13 열 매트릭스처럼 보이지만 다른 데이터가 스크립트를 통해 실행될 때 행 수는 가변적입니다. 내가 추가하는 것과 동일한 데이터로.

편집 2 : 그러나 스크립트에 오류가 발생했습니다. 그래서 나는 당신의 아이디어가 여기서 일어나는 문제를 설명한다고 생각하지 않습니다. 그래도 감사합니다. 다른 아이디어가 있습니까?


편집 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

matplotlib에서 ylim을 사용하려면 데이터 유형을 지정해야하지만 데이터 유형을 지정하면이 게시물을 시작한 오류 메시지가 표시됩니다.


누군가이 질문에서 관련이없는 세부 사항을 모두 제거하고 싶습니까?
Chris_Rands

답변:


254

우리가 보여준 코드에서 우리가 말할 수있는 유일한 것은 다차원 배열과 모양이 다른 목록에서 배열을 만들려고한다는 것입니다. 예를 들어

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

또는

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

입력 목록의 모양이 다차원 배열로 변환 될 수있는 (일반화 된) "상자"가 아니기 때문에이 오류 메시지가 나타납니다. 아마도 UnFilteredDuringExSummaryOfMeansArray길이가 다른 시퀀스를 포함하고 있을 것입니다 .

편집 :이 오류 메시지의 또 다른 가능한 원인은 문자열을 유형 배열의 요소로 사용하려고하는 것입니다 float.

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

그것이 편집에 따라 시도하는 것입니다. 문자열과 float를 모두 포함하는 NumPy 배열을 원한다면 dtype object을 사용하면 배열이 임의의 Python 객체를 보유 할 수 있습니다.

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

귀하의 코드가 무엇을 달성할지 알지 못하면 이것이 원하는 것인지 판단 할 수 없습니다.


1
고맙지 만 그 답이 아닌 것 같습니다. 위의 오류가 발생하면 배열의 내용을 추가했습니다. 메모장에 붙여 넣고 한 줄씩 살펴보면 상자 인 것 같습니다. 다른 아이디어가 있습니까?
MedicalMath

2
편집 한 내용으로 문제가 해결 된 것 같습니다. dtype = object를 설정해야했습니다. 대단히 감사합니다.
MedicalMath

이 질문은 완전히 답변되었습니다.
MedicalMath


47

파이썬 ValueError :

ValueError: setting an array element with a sequence.

그것이 의미하는 바를 의미하며, 일련의 숫자를 단일 숫자 슬롯에 넣으려고합니다. 다양한 상황에서 던질 수 있습니다.

1. 파이썬 튜플 또는 목록을 전달하여 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는 단일 숫자로 평가하기 위해 무엇이든 부여하지 않으면 시퀀스가있는 배열 요소를 설정하는 방법을 모른다고 응답합니다.


아주 좋은 설명
Tejas Shetty

15

내 경우에는 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]]

이제 작동합니다.


pyCUDA를 사용하고 실수로 gpuarray 요소를 numpy 배열에 할당했습니다 . 같은 오류가 발생했습니다.
Tirtha R

@Aaditya Ura, 그러한 패딩을 수행하는 방법은 무엇입니까?
pari

7

Numpy에서 비슷한 문제로 어려움을 겪고있는 사람들에게는 매우 간단한 해결책은 다음과 같습니다.

dtype=object값을 할당하기 위해 배열을 정의 할 때 정의 예를 들어 :

out = np.empty_like(lil_img, dtype=object)

3
Edit수락 된 답변의 일부와 어떻게 다른 가요?
सत्यमेव जयते

매력처럼 일했다!
mcagriardic

5

제 경우에는 다른 문제였습니다. int 목록을 배열로 변환하려고했습니다. 문제는 다른 것과 길이가 다른리스트가 있다는 것입니다. 증명하려면 다음을 수행해야합니다.

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

필자의 경우 길이 참조는 560입니다.


2

제 경우에는 문제가 데이터 프레임 X []의 산점도에있었습니다.

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)

좀 더 설명이 좋을 것입니다.
Tejas Shetty

1
값 오류는 부동 소수만있는 단일 숫자 슬롯에 n- 요소 배열 (시퀀스)을로드하려고 함을 의미합니다. 따라서 시퀀스로 배열 요소를 설정하려고합니다. .toarray ()를 사용하면 시퀀스 배열로 확대합니다. toarray ()는 ndarray를 반환합니다.
Max Kleiner

0

모양이 규칙적이지 않거나 요소의 데이터 유형이 다른 경우 dtypenp.array에 전달 된 인수는에만 가능합니다 object.

import numpy as np

# arr1 = np.array([[10, 20.], [30], [40]], dtype=np.float32)  # error
arr2 = np.array([[10, 20.], [30], [40]])  # OK, and the dtype is object
arr3 = np.array([[10, 20.], 'hello'])     # OK, and the dtype is also object

``


SO에 오신 것을 환영합니다. 이 질문은 매우 오래되었으며, 귀하의 답변이 다른 질문 중 하나 이상을 복제 한 것 같습니다. 답변이 실제로 다른 경우 방법을 설명하는 세부 정보를 추가하십시오.
Jens Ehrich
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.