receiving "ValueError: setting an array element with a sequence."
receiving "ValueError: setting an array element with a sequence."
我在使用这段代码时遇到了一些问题,试图得到两个一维数组的内积。感兴趣的代码如下所示:
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.
在这个错误的大多数其他例子中,我发现错误是因为数组 percentlist
和 playerlist
中的数据类型不正确,但我的应该是 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
returns 一个二元组。
当您在 others
中调用它时,您将该元组绑定到名为 percentlist
的变量,然后您尝试在点积中使用它。
我的猜测是,通过在 others
中写入它是固定的:
def others(i,percentlist,playerlist,total):
playerlist = playerlister(i)
_, percentlist = find_percents(i)
players = numpy.dot(playerlist,percentlist)
当然前提是 playerlist
和 percentlist
始终具有相同数量的元素(由于缺少电子表格,我们无法检查)。
为了验证,下面给出了准确的错误消息和重现它所需的最少代码:
>>> 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.
我在使用这段代码时遇到了一些问题,试图得到两个一维数组的内积。感兴趣的代码如下所示:
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.
在这个错误的大多数其他例子中,我发现错误是因为数组 percentlist
和 playerlist
中的数据类型不正确,但我的应该是 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
returns 一个二元组。
当您在 others
中调用它时,您将该元组绑定到名为 percentlist
的变量,然后您尝试在点积中使用它。
我的猜测是,通过在 others
中写入它是固定的:
def others(i,percentlist,playerlist,total):
playerlist = playerlister(i)
_, percentlist = find_percents(i)
players = numpy.dot(playerlist,percentlist)
当然前提是 playerlist
和 percentlist
始终具有相同数量的元素(由于缺少电子表格,我们无法检查)。
为了验证,下面给出了准确的错误消息和重现它所需的最少代码:
>>> 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.