我正在尝试使用以下格式构建列表:
(T,DT,数组)
其中t是time -float-,dt也是一个浮点数组是一个int数组,表示我的系统状态。我希望第一个元素在数组中排序元素,即t。所以我的看法是使用Python提供的堆结构。
我正在尝试的是:
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
import heapq
popsize = 10
populat = [ (0,0,np.random.randint(0,2,Nsize)) for count in range(popsize)]
heapq.heapify(populat) # Structure to order efficiently
然而,这会返回以下内容:
ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
那么有人知道它怎么能这样做?或错误来自哪里?
我正在使用Ubuntu 12.04,运行python 2.7和ipython 1.1。
我将非常感激,非常感谢。
答案 0 :(得分:2)
(0,0,np.random.randint(0,2,Nsize))
前两个元素不是t
或dt
。它们都是0.因此,元组比较试图比较第3个槽中的数组,并发现它不会产生有意义的布尔结果。你的意思是在前两个插槽中有意义吗?
答案 1 :(得分:1)
至于错误的来源:
>>> a = (0, 0, np.random.randint(0, 2, 3))
>>> a
(0, 0, array([0, 0, 1]))
>>> b = (0, 0, np.random.randint(0, 2, 3))
>>> a
(0, 0, array([0, 0, 1]))
>>> a == b
原因是numpy以非标准方式覆盖比较运算符。它返回一个numpy boolean array 。
,而不是返回一个布尔结果答案 2 :(得分:0)
所以我最终做的是在列表中添加另一个元素以使初始比较成为可能:
populat = [ (0,0,i,np.random.randint(0,2,Nsize)) for i in range(popsize)]
如上所述,如果两个第一个元素相等,则比较将转到由于bolean逻辑数组而返回错误的第三个元素(数组)。
方法是为列表中的每个成员创建一个不同的元素,该元素禁止在该数组级别进行比较(这就是我正在做的事情)。