【问题标题】:Remove row from arbitrary dimension in numpy从numpy中的任意维度删除行
【发布时间】:2021-02-20 22:12:35
【问题描述】:

我有一个函数remrow,它将任意numpy nd 数组arr 和一个整数n 作为输入。我的函数应该从arr 中删除nth 维度中的最后一行。例如,如果像这样调用我的函数:

remrow(arr,2)

arr 作为 3d 数组,那么我的函数应该返回:

arr[:,:,:-1]

如果我打电话也是如此;

remrow(arr,1)

而arr 是一个5d 数组,那么我的函数应该返回:

arr[:,:-1,:,:,:]

我的问题是这样的;我的功能必须适用于arr 的所有形状和大小以及所有兼容的n。如何使用 numpy 数组索引来做到这一点?

【问题讨论】:

    标签: python numpy indexing numpy-ndarray


    【解决方案1】:

    构造一个索引元组,由 slice(None) 和 slice(None,-1) 对象的所需组合组成。

    In [75]: arr = np.arange(24).reshape(2,3,4)
    In [76]: idx = [slice(None) for _ in arr.shape]
    In [77]: idx
    Out[77]: [slice(None, None, None), slice(None, None, None), slice(None, None, None)]
    In [78]: idx[1]=slice(None,-1)
    In [79]: arr[tuple(idx)].shape
    Out[79]: (2, 2, 4)
    In [80]: idx = [slice(None) for _ in arr.shape]
    In [81]: idx[2]=slice(None,-1)
    In [82]: arr[tuple(idx)].shape
    Out[82]: (2, 3, 3)
    

    【讨论】:

    • 嗯,我明白了——谢谢!我很好奇 - 为什么在 76 上仅指定 slice(None) 时,77 上的输出会给出 slice(None, None, None)?
    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2016-04-20
    • 2019-09-13
    • 2017-01-02
    相关资源
    最近更新 更多