首页 > 解决方案 > 使用另一个数组/列表的 Python 索引

问题描述

对不起,如果问题已经回答。我想不出一个术语来搜索这个。

我在列表中有一堆列表坐标,如下所示。

coordinate = [[0,0,0,0], [1,1,1,1,]]

我必须使用它来更改 numpy 数组中的值。(我没有使用 numpy 作为标题,因为它也可以用于普通列表)

要更改 numpy 中的值,我必须运行

array[0,0,0,0]=value

我如何array[0,0,0,0]array和制作[0,0,0,0]?我知道我如何使用字符串来制作一个看起来像那样的字符串,但是我可以使用该字符串来运行一个函数来分割索引吗?

标签: python

解决方案


使用测试数组:

In [163]: arr = np.arange(24).reshape(2,3,4) 

选择一个项目:

In [168]: arr[0,1,2]                                                            
Out[168]: 6

使用索引列表选择相同的项目:

In [169]: idx = [0,1,2]                                                         
In [170]: arr[tuple(idx)]                                                       
Out[170]: 6

arr[0,1,2]是隐含的arr[(1,2,3)]。Python 解释器将这些逗号分隔的索引号作为元组传递给数组的__getitem__方法。

这种多维索引不适用于列表。

In [171]: alist = arr.tolist()                                                  
In [172]: alist[0][1][2]                                                        
Out[172]: 6

对于几点:

In [180]: idx = np.array([[0,1,2],[1,2,3]])                                     
In [181]: idx                                                                   
Out[181]: 
array([[0, 1, 2],
       [1, 2, 3]])
In [182]: tuple(idx.T)                                                          
Out[182]: (array([0, 1]), array([1, 2]), array([2, 3]))
In [183]: arr[tuple(idx.T)]                                                     
Out[183]: array([ 6, 23])

实际上,我将 的每一列idx作为索引数组(对于每个维度)传递。


推荐阅读