当我使用 numpy 对数组进行排序时 这个问题出现了:
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()
但如果我评论这些代码,那就没关系
# 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次。
以下是代码:
# -*- 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]
答案 0 :(得分:1)
查看相关的&#39;专栏 - 关于此ValueError有很多问题。
最可能的原因是您生成True / False值的列表或数组,然后尝试在Python if/else
上下文中使用它。
因此,我不会动手并分析您的所有代码,而是建议您查看这些问题行中的变量,并确定哪些代码生成多个值。实际上,由于只有if
语句,它必须是len < temp_len
。这两个变量中的其他或另一个是数组,而不是标量。
# if len < temp_len:
# r_w[i]['length'] = len
# else:
# r_w[i]['points'] = r_g['points']
# r_w[i]['length'] = r_g['length']