ValueError:设置具有序列的数组元素

时间:2022-03-16 18:03:36

This Python code:

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

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.

Can anyone show me what to do to fix the problem in the broken code above so that it stops throwing an error message?

有没有人能告诉我如何解决上面的代码中出现的问题,从而停止抛出错误消息?


EDIT: I did a print command to get the contents of the matrix, and this is what it printed out:

编辑:我做了一个打印命令来获取矩阵的内容,这就是它打印出来的内容:

UnFilteredDuringExSummaryOfMeansArray is:

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

Looks like a 5 row by 13 column matrix to me, though the number of rows is variable when different data are run through the script. With this same data that I am adding in this.

看起来像一个由13列矩阵组成的5行,但是当不同的数据在脚本中运行时,行数是可变的。用我添加的数据。

EDIT 2: However, the script is throwing an error. So I do not think that your idea explains the problem that is happening here. Thank you, though. Any other ideas?

编辑2:但是,脚本抛出一个错误。所以我不认为你的想法解释了这里发生的问题。谢谢你,虽然。任何其他想法?


EDIT 3:

编辑3:

FYI, if I replace this problem line of code:

供大家参考,如果我替换了这个问题代码行:

    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]

with this instead:

与此相反:

    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]

Then that section of the script works fine without throwing an error, but then this line of code further down the line:

然后脚本的这一部分就可以正常工作了,不会产生错误,但是下面这一行代码:

p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())

Throws this error:

抛出这个错误:

File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
  p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type

So you can see that I need to specify the data type in order to be able to use ylim in matplotlib, but yet specifying the data type is throwing the error message that initiated this post.

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

4 个解决方案

#1


132  

From the code you showed us, the only thing we can tell is that you trying to create an array from a list that isn't shaped like a multi-dimensional array. For example

从您展示给我们的代码中,我们可以知道的唯一事情是,您试图从一个不像多维数组的列表中创建一个数组。例如

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

or

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

will yield this error message, because the shape of the input list isn't a (generalised) "box" that can be turned into a multidimensional array. So probably UnFilteredDuringExSummaryOfMeansArray contains sequences of different lengths.

将产生此错误消息,因为输入列表的形状不是a(一般化)“box”可以转换成多维数组。所以UnFilteredDuringExSummaryOfMeansArray中可能会有不同长度的序列。

Edit: Another possible cause for this error message is trying to use a string as an element in an array of type float:

编辑:这个错误消息的另一个可能的原因是尝试在类型float数组中使用字符串作为元素:

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

That is what you are trying according to your edit. If you really want to have a NumPy array containing both strings and floats, you could use the dtype object, which enables the array to hold arbitrary Python objects:

这就是你根据你的编辑正在尝试的。如果您真的希望有一个包含字符串和浮点数的NumPy数组,那么您可以使用dtype对象,它使数组能够容纳任意的Python对象:

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

Without knowing what your code shall accomplish, I can't judge if this is what you want.

如果不知道代码应该完成什么,我无法判断这是否是您想要的。

#2


10  

The Python ValueError:

Python ValueError:

ValueError: setting an array element with a sequence.

Means exactly what it says, you're trying to cram a sequence of numbers into a single number slot. It can be thrown under various circumstances.

它的意思就是,你想把一串数字塞进一个数字槽里。它可以在各种情况下抛出。

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

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

A numpy array is being created, and numpy doesn't know how to cram multivalued tuples or arrays into single element slots. It expects whatever you give it to evaluate to a single number, if it doesn't, Numpy responds that it doesn't know how to set an array element with a sequence.

正在创建一个numpy数组,numpy不知道如何将多值元组或数组填入单个元素槽中。它期望你给它的值是一个数字,如果没有,Numpy回答它不知道如何用序列设置数组元素。

#3


2  

In my case , I got this Error in Tensorflow , Reason was i was trying to feed a array with different length or sequences :

在我的例子中,我在Tensorflow中得到了这个错误,原因是我试图输入一个不同长度或序列的数组:

example :

例子:

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)

And if my array is :

如果我的数组是:

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

Then i will get error :

然后会得到误差:

ValueError: setting an array element with a sequence.

but if i do padding then :

但是如果我做填充的话:

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

Now it's working.

现在的工作。

#4


1  

In my case, the problem was another. I was trying convert lists of lists of int to array. The problem was that there was one list with a different length than others. If you want to prove it, you must do:

对我来说,问题是另一个。我试着把int列表的列表转换成数组。问题是,有一个列表的长度与其他列表不同。如果你想证明它,你必须:

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

In my case, the length reference was 560.

在我的例子中,长度引用是560。

#1


132  

From the code you showed us, the only thing we can tell is that you trying to create an array from a list that isn't shaped like a multi-dimensional array. For example

从您展示给我们的代码中,我们可以知道的唯一事情是,您试图从一个不像多维数组的列表中创建一个数组。例如

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

or

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

will yield this error message, because the shape of the input list isn't a (generalised) "box" that can be turned into a multidimensional array. So probably UnFilteredDuringExSummaryOfMeansArray contains sequences of different lengths.

将产生此错误消息,因为输入列表的形状不是a(一般化)“box”可以转换成多维数组。所以UnFilteredDuringExSummaryOfMeansArray中可能会有不同长度的序列。

Edit: Another possible cause for this error message is trying to use a string as an element in an array of type float:

编辑:这个错误消息的另一个可能的原因是尝试在类型float数组中使用字符串作为元素:

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

That is what you are trying according to your edit. If you really want to have a NumPy array containing both strings and floats, you could use the dtype object, which enables the array to hold arbitrary Python objects:

这就是你根据你的编辑正在尝试的。如果您真的希望有一个包含字符串和浮点数的NumPy数组,那么您可以使用dtype对象,它使数组能够容纳任意的Python对象:

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

Without knowing what your code shall accomplish, I can't judge if this is what you want.

如果不知道代码应该完成什么,我无法判断这是否是您想要的。

#2


10  

The Python ValueError:

Python ValueError:

ValueError: setting an array element with a sequence.

Means exactly what it says, you're trying to cram a sequence of numbers into a single number slot. It can be thrown under various circumstances.

它的意思就是,你想把一串数字塞进一个数字槽里。它可以在各种情况下抛出。

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

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

A numpy array is being created, and numpy doesn't know how to cram multivalued tuples or arrays into single element slots. It expects whatever you give it to evaluate to a single number, if it doesn't, Numpy responds that it doesn't know how to set an array element with a sequence.

正在创建一个numpy数组,numpy不知道如何将多值元组或数组填入单个元素槽中。它期望你给它的值是一个数字,如果没有,Numpy回答它不知道如何用序列设置数组元素。

#3


2  

In my case , I got this Error in Tensorflow , Reason was i was trying to feed a array with different length or sequences :

在我的例子中,我在Tensorflow中得到了这个错误,原因是我试图输入一个不同长度或序列的数组:

example :

例子:

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)

And if my array is :

如果我的数组是:

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

Then i will get error :

然后会得到误差:

ValueError: setting an array element with a sequence.

but if i do padding then :

但是如果我做填充的话:

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

Now it's working.

现在的工作。

#4


1  

In my case, the problem was another. I was trying convert lists of lists of int to array. The problem was that there was one list with a different length than others. If you want to prove it, you must do:

对我来说,问题是另一个。我试着把int列表的列表转换成数组。问题是,有一个列表的长度与其他列表不同。如果你想证明它,你必须:

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

In my case, the length reference was 560.

在我的例子中,长度引用是560。