【问题标题】:Numpy indexing oddity: How to subselect from multidimensional array and keep all axesNumpy 索引异常:如何从多维数组中进行子选择并保留所有轴
【发布时间】:2023-01-11 07:54:22
【问题描述】:

我有一个多维数组,并且有两个整数列表,L_i 和 L_j,对应于我要保留的 axis-i 和 axis-j 的元素。我还想满足以下条件:

  1. 保持数组的原始维度,即使 L_i 或 L_j 仅包含 1 个元素(换句话说,我不想要一个单例 要折叠的轴)
  2. 保留轴的顺序

    最干净的方法是什么?

    这是一个可重现的示例,显示了我遇到的一些意外行为:

    import numpy as np
    aa = np.arange(120).reshape(5,4,3,2)
    aa.shape
    ### (5,4,3,2) as expected
    
    aa[:,:,:,[0,1]].shape
    ### (5, 4, 3, 2) as expected
    
    aa[:,:,:,[0]].shape
    ### (5,4,3,1) as desired. Notice that even though the [0] is one element, 
    ### that last axis is preserved, which is what I want
    
    aa[:,[1,3],:,[0]].shape
    ### (2, 5, 3) NOT WHAT I EXPECTED!!
    ### I was expecting (5, 2, 3, 1)
    

    想知道为什么 numpy 正在折叠和重新排序轴,也是正确进行子集化的最佳方法。

【问题讨论】:

  • 试试aa[:, :1, :, :1]
  • 虽然这适用于我给出的玩具示例,但如果 L_i = [0, 3, 4] 或其他一些非连续范围怎么办?
  • 如果,真的。制作一个实际的 MCVE
  • 我相信我的例子是 MVCE。它演示了使用列表为各种轴选择索引的奇怪之处,即使我的特定选择确实有一个硬编码的解决方法。话虽如此,我将调整我的示例,使其无法使用“:1”表示法解决

标签: python arrays numpy


【解决方案1】:

一次减少一个轴:

aa[:, [1, 3], :, :][..., [0]].shape
(5, 2, 3, 1)

【讨论】:

    猜你喜欢
    • 2020-03-26
    • 2021-07-20
    • 2019-03-12
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多