【问题标题】:Python slicing numpy array using another array as depthPython使用另一个数组作为深度切片numpy数组
【发布时间】:2021-06-27 12:34:43
【问题描述】:

我有一个 3 维 numpy 数组,维度为 (x = 2, y = 2, z = 3),如下所示

a = [[[0,1,2],[3,4,5]],
    [[6,7,8],[9,10,11]]]

我想从 a 的每个 (x, y) 元素中获取前 N 个元素,其中 N 定义在另一个大小为 x,y 的数组中。例如

b = [[1,2],
     [0,0]]

结果应该是

c = [[[0,1],[3,4,5]],
    [[6],[9]]

如何在没有循环的情况下做到这一点?

【问题讨论】:

    标签: python arrays numpy slice


    【解决方案1】:

    您可以在给定范围内的a 中的元素上创建一个掩码,并在需要对a 进行操作时使用此掩码。如果您想将掩码和数组封装在一个实体中,请查看numpy.ma 模块。

    a = np.array([[[0,1,2],[3,4,5]],
                 [[6,7,8],[9,10,11]]])
    
    b = np.array([[1,2],
                  [0,0]])
    
    mask = np.arange(3)[None,None,:] <= b[:,:,None]
    
    a[mask]
    

    输出:

    array([0, 1, 3, 4, 5, 6, 9])
    

    但如果您希望输出为非同质数组,我想不出比使用循环更好的方法。

    【讨论】:

    • 不错的一个!我所做的就是在提取这些值后对它们求和,这样就可以完成这项工作。谢谢
    猜你喜欢
    • 2012-09-17
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2020-12-11
    • 2011-08-30
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多