numpy数组中列表的索引

2024-09-27 00:13:56 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在写一个代码,它使用精确对角化来研究Lieb-Liniger模型。第一步是构建一个包含描述粒子占据的列表的numpy数组。数组看起来像

array([[2, 0, 0],
   [1, 1, 0],
   [1, 0, 1],
   [0, 2, 0],
   [0, 1, 1],
   [0, 0, 2]])

对于3个粒子中的2个模式。我的问题是,是否可以在这个数组中获取特定列表的索引,类似于使用index函数在常规列表中获取索引。例如,对于一个列表列表,a,我可以使用a.index(a中的一些列表)来获取该列表的索引,但是我尝试过使用纽比。在哪里(HS=[2,0,0]),以获得[2,0,0]的索引(依此类推),但没有效果。对于大量的粒子和模式,我正在寻找一种有效的方法来获得这些指数,我认为使用numpy数组是非常有效的,但是我刚刚碰到了这个问题,并没有找到解决方案。有什么建议吗?在


Tags: 函数代码模型numpy列表index模式粒子
2条回答

您可以使用np.where()执行以下操作:

pattern = [2,0,0]
index = np.where(np.all(a==pattern, axis=1))[0]

以下是几种执行此查找的方法:

In [36]: A=np.array([[2,0,0],[1,1,0],[1,0,1],[0,2,0],[0,1,1],[0,0,2]])
In [37]: pattern = [0,2,0]

In [38]: np.where(np.all(pattern==A,1))  # Saullo's where
Out[38]: (array([3]),)

In [39]: A.tolist().index(pattern)  # your list find
Out[39]: 3

In [40]: D={tuple(a):i for i,a in enumerate(A.tolist())}  # dictionary
In [41]: D[tuple(pattern)]
Out[41]: 3

我使用元组作为字典键-元组是一个不可变的列表。在

对于这个小尺寸,字典方法是最快的,特别是如果字典可以构建一次并重复使用。即使是动态构造,它也比np.where更快。但是你应该用更真实的尺寸来测试它。在

Python字典针对速度进行了调整,因为它们是语言操作的基础。在

np.where中的片段都很快,使用了编译的代码。但是,它仍然需要比较A和{}的所有元素。除了字典哈希查找,还有很多工作要做。在

相关问题 更多 >

    热门问题