如何解决从numpy中的任意维度删除行
我有一个函数remrow
,它将一个任意的numpy nd数组arr
和一个整数n
作为输入。我的函数应从第arr
维的n
中删除最后一行。例如,如果这样调用我的函数:
remrow(arr,2)
以arr
作为3d数组,则我的函数应返回:
arr[:,:,:-1]
类似地,如果我打电话;
remrow(arr,1)
并且arr
是一个5d数组,那么我的函数应该返回:
arr[:,:-1,:]
我的问题是这个;我的函数必须适用于arr
的所有形状和大小以及所有兼容的n
。我该如何使用numpy数组索引?
解决方法
构造一个索引元组,该索引元组由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)]
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。