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

मेरे लिए 13 कॉलम मैट्रिक्स द्वारा 5 पंक्ति की तरह दिखता है, हालांकि स्क्रिप्ट के माध्यम से अलग-अलग डेटा चलाने पर पंक्तियों की संख्या परिवर्तनशील होती है। इसी डेटा के साथ जो मैं इसमें जोड़ रहा हूं।

EDIT 2 : हालाँकि, स्क्रिप्ट एक त्रुटि फेंक रहा है। इसलिए मुझे नहीं लगता कि आपका विचार यहां होने वाली समस्या की व्याख्या करता है। फिर भी आपका धन्यवाद। कोई अन्य विचार?


संपादित करें 3:

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

तो आप देख सकते हैं कि मुझे matplotlib में ylim का उपयोग करने में सक्षम होने के लिए डेटा प्रकार को निर्दिष्ट करने की आवश्यकता है, लेकिन फिर भी डेटा प्रकार को निर्दिष्ट करने से इस पोस्ट को शुरू करने वाले त्रुटि संदेश को फेंक दिया जाता है।


क्या कोई इस प्रश्न से सभी अप्रासंगिक विवरण निकालना चाहता है?
क्रिस

जवाबों:


254

आपको दिखाए गए कोड से, केवल एक चीज जो हम बता सकते हैं, वह यह है कि आप एक सूची से एक सरणी बनाने की कोशिश कर रहे हैं जो एक बहुआयामी सरणी के आकार का नहीं है। उदाहरण के लिए

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, जो सरणी को मनमाने ढंग से पायथन ऑब्जेक्ट्स रखने में सक्षम बनाता है:

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

यह जानने के बिना कि आपका कोड क्या पूरा करेगा, अगर आप यह चाहते हैं तो मैं न्याय नहीं कर सकता।


1
धन्यवाद, लेकिन मुझे नहीं लगता कि इसका जवाब है। मैंने सरणी की सामग्री को तब जोड़ा है जब वह ऊपर की त्रुटि फेंकता है। और यह मुझे लगता है कि यह एक बॉक्स है जब मैं इसे नोटपैड में चिपकाता हूं और लाइन से लाइन की जांच करता हूं। कोई अन्य विचार?
मेडिकलमैट

2
लगता है आपके संपादन ने मेरी समस्या हल कर दी है। मुझे dtype = ऑब्जेक्ट सेट करने की आवश्यकता है। आपका बहुत बहुत धन्यवाद।
मेडिकलमैथ

इस सवाल का पूरी तरह से जवाब दिया गया है।
मेडिकलमैट

एक अन्य संभावना 1.9 में एक मुद्दा हो सकता है जब वस्तुओं की एक सरणी का निर्माण (आवश्यक सूची नहीं) जो __getitem__यहां निर्दिष्ट के रूप में लागू होती है: github.com/numpy/numpy/issues/5100
dashesy

47

पायथन वैल्यूError:

ValueError: setting an array element with a sequence.

इसका मतलब है कि यह क्या कहता है, आप संख्याओं के अनुक्रम को एक एकल संख्या स्लॉट में रटना चाहते हैं। इसे विभिन्न परिस्थितियों में फेंका जा सकता है।

1. जब आप एक अजगर टपल या सूची को पास करते हैं, तो इसे एक अरी सरणी तत्व के रूप में व्याख्या किया जाता है:

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. एक खुरदरी सरणी लंबाई> 1 को खुरदरी सरणी तत्व में रटना करने की कोशिश करके:

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 जवाब देता है कि यह नहीं जानता कि अनुक्रम के साथ एक सरणी तत्व कैसे सेट किया जाए।


बहुत अच्छी व्याख्या
तेजस शेट्टी

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 तत्व को सुन्न सरणी में सौंपा गया था । मुझे भी यही त्रुटि मिली।
तीर्थ R

@ आदित्य उरा, इस तरह की गद्दी का संचालन कैसे किया जाता है, क्या आप कुछ संदर्भित कर सकते हैं?
पारी

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

मेरे मामले में, समस्या एक डेटाफ्रेम एक्स के बिखराव के साथ थी []:

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)

कुछ और स्पष्टीकरण अच्छा होगा।
तेजस शेट्टी

1
मान त्रुटि का अर्थ है कि हम एक n- तत्व सरणी (अनुक्रम) को एक एकल संख्या स्लॉट में लोड करने की कोशिश कर रहे हैं जिसमें केवल एक फ्लोट है। इसलिए, आप एक अनुक्रम के साथ एक सरणी तत्व सेट करने का प्रयास कर रहे हैं। .Toarray () के साथ हम इसे अनुक्रम की एक पंक्ति में बढ़ाते हैं। toarray () रिटर्न a ndarray;
अधिकतम क्लेनर

0

जब आकृति नियमित नहीं होती है या तत्वों के अलग-अलग डेटा प्रकार होते हैं, तो dtypeतर्क केवल np.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

``


एसओ में आपका स्वागत है। यह प्रश्न बहुत पुराना है, और ऐसा लगता है कि आपका उत्तर दूसरों में से कम से कम एक को दोहराता है। यदि आपका उत्तर वास्तव में अलग है, तो कुछ और विवरण जोड़ने का प्रयास करें जो बताते हैं कि कैसे।
जेन्स एहरिक जूल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.