【问题标题】:Extract values array using indices使用索引提取值数组
【发布时间】:2016-04-02 23:17:06
【问题描述】:

我需要从多维数组中提取某些非后续值。

import numpy as np    
A = np.array([[[ 0.,          4.,          0.        ],
               [ 0.19230769,  4.03846154,  0.        ],
               [-0.4,         4.8,         0.        ],
               [ 2.,          1.,          0.        ]],

              [[ 1.2,         3.4,         0.        ],
               [ 2.11538462,  4.42307692,  0.        ],
               [ 0.,          4.,          0.        ],
               [ 3.6,         1.8,         0.        ]],

              [[ 1.8,         3.1,         0.        ],
               [ 3.17307692,  4.63461538,  0.        ],
               [ 0.,          4.,          0.        ],
               [ 4.,          2.,          0.        ]]])

对于每个 4x3 块,我想提取任意行

例如以下元素:

A[0,2,:]
A[1,1,:]
A[2,1,:]

所以基本上是 rowsB = [2,1,1],这会给我:

[-0.4         4.8         0.        ]
[ 2.11538462  4.42307692  0.        ]
[ 3.17307692  4.63461538  0.        ]

如何有效地做到这一点?

【问题讨论】:

    标签: python arrays numpy indices


    【解决方案1】:

    你可以使用"advanced indexing":

    In [99]: A[[0,1,2], [2,1,1], :]
    Out[99]: 
    array([[-0.4       ,  4.8       ,  0.        ],
           [ 2.11538462,  4.42307692,  0.        ],
           [ 3.17307692,  4.63461538,  0.        ]])
    

    这里的索引数组是

    ind1 = [0, 1, 2]
    ind2 = [2, 1, 1]
    

    由于ind1 正在索引A 的第一个轴,ind2 正在索引第二个轴,并且第三个轴被完全切片(使用:),结果数组result,具有与ind1ind2 相同的形状——即(3,)——加上完全切片轴的形状,也就是(3,)。因此,result.shape(3, 3)

    result[i, j] = A[ind1[i], ind2[i], j]
    

    对于i = 0,1,2j = 0,1,2

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2023-03-31
      • 1970-01-01
      • 2016-10-10
      • 2018-09-25
      • 2023-01-30
      • 2011-09-17
      • 2015-06-13
      • 2013-09-18
      相关资源
      最近更新 更多