numpy.sort()错误ValueError:具有多个元素的数组的真值不明确.使用a.any()或a.all() [英] numpy.sort() error ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
问题描述
当我使用 numpy 对数组进行排序时 这个问题出现了:
When I use numpy to sort an array this problem come up :
Traceback (most recent call last):
File "D:/Desktop/LIP/complier/num/f_t.py", line 75, in <module>
frogs[i].sort(order='length')
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
但是如果我注释这些代码,就可以了
But if I comment these codes,it is ok
# if len < temp_len:
# r_w[i]['length'] = len
# else:
# r_w[i]['points'] = r_g['points']
# r_w[i]['length'] = r_g['length']
为什么?
r_g
是最佳路由,r_w
是每个组中最差的路由,r_b
是每个组中的最佳路由.
我想循环更改最差的路线5次.
r_g
is the best route,r_w
are the worst routes in every group,r_b
is the best route in every group.
I want to change the worst route for 5 times in a loop.
这是代码:
# -*- coding: utf-8 -*-
# __author__ = 'youzipi'
import numpy as np
def cal_length(route):
length = 0
for i in range(POINTS_NUM):
p1 = points[route[i]]
p2 = points[route[(i + 1) % POINTS_NUM]]
length += np.linalg.norm(p1 - p2)
return length
POINTS_NUM = 10
ROUTES_NUM = 50
routetype = np.dtype({
'names': ['points', 'length'],
'formats': ['O', 'f']})
routes = np.zeros([(ROUTES_NUM)], dtype=routetype)
points = np.random.rand(POINTS_NUM, 2) * 10
print "points=", points
for index in range(ROUTES_NUM):
temp = np.random.permutation(range(POINTS_NUM))
length = cal_length(temp)
routes[index] = (temp, length)
print "after sort"
routes.sort(order=('length'))
print routes
frogs = np.zeros([5, 10], dtype=routetype)
for i in range(5):
t = 0
for j in range(ROUTES_NUM):
if j%5 == i:
frogs[i][j/5]['points'] = routes[j]['points']
frogs[i][j/5]['length'] = routes[j]['length']
for i in range(5):
print "frogs", i
print frogs[i]
p = routes['length']
print p
r_g = routes[0]
print "r_g", r_g
r_b = frogs[:, 0]
print "r_b", r_b
r_w = frogs[:, 9]
print "r_w", r_w
#def update_frogs():
#global r_w, r_b, r_b
for i in range(5):
for j in range(5):
cut = int(np.random.rand(1)[0] * 10)
ran = np.random.permutation(range(POINTS_NUM))
print 'r_w', r_w[i]
print 'r_b', r_b[i]
temp_len = r_w[i]['length']
r_w[i]['points'] = np.hstack((r_b[i]['points'][:cut], np.linspace(-1, -1, 10)[cut:]))
for t in ran:
if t not in r_w[i]['points']:
r_w[i]['points'][cut] = t
cut = cut + 1
if cut >= POINTS_NUM:
break
len = cal_length(r_w[i]['points'])
# if len < temp_len:
# r_w[i]['length'] = len
# else:
# r_w[i]['points'] = r_g['points']
# r_w[i]['length'] = r_g['length']
frogs[i].sort(order='length')#trackbreak here!!
r_w[i]['points'] = frogs[i, 9]['points']
r_w[i]['length'] = frogs[i, 9]['length']
print "after"
print 'f_w', r_w[i]
print 'f_b', r_b[i]
推荐答案
查看相关"列-有关此ValueError的问题很多.
Look at the 'related' column - there are lots of questions about this ValueError.
最可能的原因是您生成True/False值的列表或数组,然后尝试在Python if/else
上下文中使用它.
The most likely cause is that you generate a list or array of True/False values and then try to use it in a Python if/else
context.
因此,我建议您不要查看那些问题行中的变量,并确定哪些正在生成多个值,而不是牵着手分析所有代码.实际上,由于仅在if
语句上,因此必须为len < temp_len
.这两个变量中的另一个或另一个是数组,而不是标量.
So instead of holding your hand and analyzing all of your code, I'm going to suggest that you look at the variables in the those problem lines, and determine which are generating multiple values. Actually, since there is only on if
statement, it has to be len < temp_len
. Other or other of those 2 variables is a array, not a scalar.
# if len < temp_len:
# r_w[i]['length'] = len
# else:
# r_w[i]['points'] = r_g['points']
# r_w[i]['length'] = r_g['length']
这篇关于numpy.sort()错误ValueError:具有多个元素的数组的真值不明确.使用a.any()或a.all()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!