在Python中用数组显示列表

在Python中用数组显示列表,python,arrays,heap,Python,Arrays,Heap,我正在尝试使用以下格式创建列表: (t,dt,数组) 其中t是time-float-,dt也是一个float数组是一个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.

我正在尝试使用以下格式创建列表:

(t,dt,数组)

其中t是time-float-,dt也是一个float数组是一个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,0,np.random.randint(0,2,Nsize))
前两个元素不是
t
dt
。他们都是0。因此,元组比较尝试比较第三个插槽中的数组,并发现这不会产生有意义的布尔结果。你的意思是在前两个插槽中有一些有意义的东西吗

前两个元素不是
t
dt
。他们都是0。因此,元组比较尝试比较第三个插槽中的数组,并发现这不会产生有意义的布尔结果。你的意思是在前两个插槽中有一些有意义的东西吗

前两个元素不是
t
dt
。他们都是0。因此,元组比较尝试比较第三个插槽中的数组,并发现这不会产生有意义的布尔结果。你的意思是在前两个插槽中有一些有意义的东西吗


前两个元素不是
t
dt
。他们都是0。因此,元组比较尝试比较第三个插槽中的数组,并发现这不会产生有意义的布尔结果。您的意思是在前两个插槽中有一些有意义的内容吗?

至于错误的来源:

>>> 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布尔数组。

关于错误的来源:

>>> 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布尔数组。

关于错误的来源:

>>> 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布尔数组。

关于错误的来源:

>>> 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布尔数组。

因此,我最后要做的是在列表中添加另一个元素,使初始比较成为可能:

populat = [ (0,0,i,np.random.randint(0,2,Nsize)) for i in range(popsize)]
如上所述,如果前两个元素相等,则比较将转到第三个元素(数组),该元素返回由于bolean逻辑数组导致的错误


解决方法是为列表中的每个成员创建一个不同的元素,该元素禁止在该数组级别进行比较(这就是i所做的)

因此,我最后做的是在列表中添加另一个元素,使初始比较成为可能:

populat = [ (0,0,i,np.random.randint(0,2,Nsize)) for i in range(popsize)]
如上所述,如果前两个元素相等,则比较将转到第三个元素(数组),该元素返回由于bolean逻辑数组导致的错误


解决方法是为列表中的每个成员创建一个不同的元素,该元素禁止在该数组级别进行比较(这就是i所做的)

因此,我最后做的是在列表中添加另一个元素,使初始比较成为可能:

populat = [ (0,0,i,np.random.randint(0,2,Nsize)) for i in range(popsize)]
如上所述,如果前两个元素相等,则比较将转到第三个元素(数组),该元素返回由于bolean逻辑数组导致的错误


解决方法是为列表中的每个成员创建一个不同的元素,该元素禁止在该数组级别进行比较(这就是i所做的)

因此,我最后做的是在列表中添加另一个元素,使初始比较成为可能:

populat = [ (0,0,i,np.random.randint(0,2,Nsize)) for i in range(popsize)]
如上所述,如果前两个元素相等,则比较将转到第三个元素(数组),该元素返回由于bolean逻辑数组导致的错误


解决方法是为列表中的每个成员创建一个不同的元素,该元素禁止在该数组级别进行比较(这就是i所做的)

是的,那里会有一些有意义的东西。但首先我必须初始化它们。顺便说一句,你的回答很有帮助,因为它提出了一个解决办法。如果我有权利,我会投你一票。谢谢。@RamonMartinez:你最有可能的做法是先用实际数据建立列表,而不是用零填充然后再填充。如果你需要在给出有意义的比较结果的项目部分相等时对其进行重排序,请设置一个“防护”要控制比较的部分后的值。用计数器初始化保护;每个连续项的值都比前一项高1。是的,那里会有一些有意义的东西。但首先我必须初始化它们。顺便说一句,你的回答很有帮助,因为它提出了一个解决办法。如果我有权利,我会投你一票。谢谢。@RamonMartinez:你最有可能的做法是先用实际数据建立列表,而不是用零填充然后再填充。如果你需要在给出有意义的比较结果的项目部分相等时对其进行重排序,请设置一个“防护”要控制比较的部分后的值。用计数器初始化保护;每个连续项都有一个v