【问题标题】:Python indexing using another array/list [duplicate]使用另一个数组/列表的 Python 索引 [重复]
【发布时间】:2019-10-15 18:09:33
【问题描述】:

对不起,如果问题已经回答。我想不出用什么词来搜索这个。

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

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]?我知道我如何使用字符串来创建一个看起来像这样的字符串,但是我可以使用该字符串来运行一个函数来分割索引吗?

【问题讨论】:

  • 抱歉,我对您的问题感到困惑?你想改变什么?您能否在问题中提供更多详细信息以及一些示例?
  • 我正在尝试使用字符串 array 和列表 [0,0,0,0] 来创建命令 array[0,0,0,0]
  • 这并不容易。您可以使用eval,但我不推荐它。您可能可以使用 numpy 进行元组解包,例如:array[*coordinate[0]] = value。没有真正“安全”的方法可以将字符串转换为原始语法。
  • 将索引列表转换为元组:array[tuple(coordinate[0])]
  • 请输入您的实际输入。不需要模棱两可

标签: python


【解决方案1】:

带测试数组:

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 的每一列作为索引数组(针对每个维度)传递。

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2018-03-27
    • 2013-07-30
    • 2016-10-29
    相关资源
    最近更新 更多