首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取numpy数组中第k维的第i个片

获取numpy数组中第k维的第i个片
EN

Stack Overflow用户
提问于 2017-03-16 02:08:55
回答 5查看 1K关注 0票数 8

我有一个n-dimensional numpy数组,我想获得k-th维度的i-th切片。一定有比这更好的东西

代码语言:javascript
复制
# ... 
elif k == 5:
    b = a[:, :, :, :, :, i, ...]
# ...
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-03-16 02:14:21

代码语言:javascript
复制
b = a[(slice(None),) * k + (i,)]

手动构建索引元组。

Python language reference中所述,以下形式的表达式

代码语言:javascript
复制
a[:, :, :, :, :, i]

转换为

代码语言:javascript
复制
a[(slice(None), slice(None), slice(None), slice(None), slice(None), i)]

我们可以通过直接构建元组来达到同样的效果,而不是使用切片表示法。(有一个小问题,即构建元组直接生成a[(i,)],而不是k=0a[i],但NumPy对标量i的处理方式与此相同。)

票数 13
EN

Stack Overflow用户

发布于 2017-03-16 02:17:59

我不确定它是否适用于k- dim,但它适用于2- dim

代码语言:javascript
复制
a.take(i,axis=k)
票数 4
EN

Stack Overflow用户

发布于 2017-03-16 02:29:02

基本上,您希望能够以编程方式创建元组:, :, :, :, :, i, ...,以便将其作为a的索引传递。不幸的是,您不能简单地对冒号操作符直接使用普通的元组乘法(即,(:,) * k不能生成k冒号操作符的元组)。但是,您可以使用colon = slice(None)获取“冒号切片”的实例。然后,您可以执行b = a[(colon,) * k + (i,)],这将有效地在ith维度的kth列对a进行索引。

将其封装在一个函数中,您将得到:

代码语言:javascript
复制
def nDimSlice(a, k, i):
    colon = slice(None)
    return a[(colon,) * k + (i,)]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42817508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档