首页 文章

ValueError:使用序列设置数组元素

提问于
浏览
127

This Python code:

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

Throws this error message:

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: 我做了一个打印命令来获取矩阵的内容,这就是打印出的内容:

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

因此,您可以看到我需要指定数据类型才能在matplotlib中使用ylim,但是指定数据类型会抛出发起此帖子的错误消息 .

6 回答

  • 180

    从你向我们展示的代码中,我们唯一可以告诉你的是你试图从一个形状不像多维数组的列表中创建一个数组 . 例如

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

    要么

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

    将产生此错误消息,因为输入列表的形状不是可以转换为多维数组的(通用)"box" . 所以 UnFilteredDuringExSummaryOfMeansArray 可能包含不同长度的序列 .

    Edit :此错误消息的另一个可能原因是尝试将字符串用作 float 类型数组中的元素:

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

    这就是你根据编辑尝试的内容 . 如果你真的想要一个包含字符串和浮点数的NumPy数组,你可以使用dtype object ,它使数组能够保存任意Python对象:

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

    在不知道你的代码应该完成什么的情况下,我无法判断这是否是你想要的 .

  • 4

    The Python ValueError:

    ValueError: setting an array element with a sequence.
    

    完全意味着它所说的,你试图将一系列数字塞进一个数字槽中 . 它可以在各种情况下抛出 .

    1. When you pass a python tuple or list to be interpreted as a numpy array element:

    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. By trying to cram a numpy array length > 1 into a numpy array element:

    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会回答它不知道如何用序列设置数组元素 .

  • 25

    在我的情况下,我在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]]
    

    现在它正在运作 .

  • 10

    就我而言,问题是另一个问题 . 我正在尝试将int列表转换为数组 . 问题是有一个列表的长度与其他列表不同 . 如果你想证明它,你必须做:

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

    就我而言,长度参考是560 .

  • 4

    对于那些在Numpy遇到类似问题的人来说,一个非常简单的解决方案是:

    在定义用于为其赋值的数组时定义 dtype=object . 例如:

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

    就我而言,问题在于数据帧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)
    

相关问题