python - 接收 "ValueError: setting an array element with a sequence."

标签 python arrays numpy xlrd

我在使用这段代码时遇到了一些问题,试图最终得到两个一维数组的内积。感兴趣的代码如下所示:

def find_percents(i):
    percents=[]
    median=1.5/(6+2*int(i/12))
    b=2*median
    m=b/(7+2*int(i/12))
    for j in xrange (1,6+2*int(i/12)):
        percents.append(float((b-m*j)))
    percentlist=numpy.asarray(percents, dtype=float)
    #print percentlist
    total=sum(percentlist)
    return total, percentlist

def playerlister(i):
    players=[]
    for i in xrange(i+1,i+6+2*int(i/12)):
        position=sheet.cell(i,2)
        points=sheet.cell(i,24)
        if re.findall('RB', str(position.value)):
            vbd=points.value-rbs[24]
            players.append(vbd)
        else:
            pass
    playerlist=numpy.asarray(players, dtype=float)
    return playerlist

def others(i,percentlist,playerlist,total):
    alternatives=[]
    playerlist=playerlister(i)
    percentlist=find_percents(i)
    players=numpy.dot(playerlist,percentlist)

我收到以下错误来响应此附加代码的最后一行:

ValueError: setting an array element with a sequence.

在这个错误的大多数其他示例中,我发现错误是由于数组 percentlistplayerlist 中的数据类型不正确造成的,但我的应该是 float 类型。如果有帮助的话,我稍后会在程序中调用这些函数,如下所示:

for i in xrange(1,30):
    total, percentlist= find_percents(i)
    playerlist= playerlister(i)
    print type(playerlist[i])
    draft_score= others(i,percentlist,playerlist,total)

任何人都可以帮我弄清楚为什么我要使用序列设置数组元素吗?如果有更多信息可能有帮助,请告诉我!另外为了清楚起见,playerlister 正在使用 xlrd 模块从电子表格中提取数据,但数据是数字,并且测试表明两个列表都有一个类型numpy.float64

i 的一次迭代中每个元素的形状和内容为

<type 'numpy.float64'>
(5,)
[  73.7  -94.4  140.9   44.8  130.9]
(5,)
[ 0.42857143  0.35714286  0.28571429  0.21428571  0.14285714]

最佳答案

您的函数find_percents返回一个二元素元组。 当您在 others 中调用它时,您将该元组绑定(bind)到名为 percentlist 的变量,然后尝试在点积中使用该变量。

我的猜测是,通过在 others 中编写此内容即可修复:

def others(i,percentlist,playerlist,total):
    playerlist = playerlister(i)
    _, percentlist = find_percents(i)
    players = numpy.dot(playerlist,percentlist)

当然,前提是 playerlistpercentlist 始终具有相同数量的元素(由于缺少电子表格,我们无法检查)。

为了进行验证,以下内容为您提供了确切的错误消息以及重现该错误所需的最少代码:

>>> import numpy as np
>>> a = np.arange(5)
>>> np.dot(a, (2, a))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence.

关于python - 接收 "ValueError: setting an array element with a sequence.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461191/

相关文章:

python - 根据长度从字符串中删除最后一位数字

python - 在 OpenCV 中保存视频(Linux、Python)

python - begin_nested() 是否自动回滚/提交?

javascript - JS 关联数组上的 toString()

c - 链表数组初始化

python - 切片数组的形状

python - request.cls.driver 在具有类范围的 pytest fixture 中有什么作用?

c - 指向引用加上数组之一的指针

python - 了解 numpy.r_() 串联的语法

python - 将所有非黑色像素转换为一种颜色不会产生预期的输出