首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展对numpy数组进行切片的步骤

扩展对numpy数组进行切片的步骤
EN

Stack Overflow用户
提问于 2019-04-10 15:00:11
回答 3查看 189关注 0票数 2

我的问题类似于:subsampling every nth entry in a numpy array

假设我有一个数组,如下所示:A=1,2,2,3,4,1,2,2,3,4,1,2,2,3,4,1,2,2,3,4……

如何扩展切片,以便以特定的间隔对三个元素进行切片?也就是说,我如何从数组中切分2?我认为基本的切片在这种情况下不起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-10 15:05:12

您可以通过单独的索引来实现这一点。

我们想从索引1处的元素开始,取3个元素,然后跳过3个元素:

代码语言:javascript
复制
a = np.array([1, 2, 2, 2, 3, 4, 1, 2, 2, 2, 3, 4, 1, 2, 2, 2, 3, 4])

start = 1
take = 3
skip = 3

indices = np.concatenate([np.arange(i, i + take) for i in range(start, len(a), take + skip)])

print(indices)
print(a[indices])

输出:

代码语言:javascript
复制
[ 1  2  3  7  8  9 13 14 15]
[2 2 2 2 2 2 2 2 2]
票数 3
EN

Stack Overflow用户

发布于 2019-04-10 15:19:30

这里最简单的似乎是:

代码语言:javascript
复制
 a = np.array([1,2,2,2,3,4,1,2,2,2,3,4,1,2,2,2,3,4])
 a.reshape(-1,6)[1:4].ravel()

或者如果a不能很好地分块:

代码语言:javascript
复制
period = 6
a.resize(np.math.ceil(a.size/period),period)
a[:,1:4].ravel()
票数 3
EN

Stack Overflow用户

发布于 2019-04-10 15:24:51

这是一个带有masking的矢量化版本-

代码语言:javascript
复制
def take_sliced_regions(a, start, take, skip):
    r = np.arange(len(a))-start
    return a[r%(take+skip)<take]

示例运行-

代码语言:javascript
复制
In [90]: a = np.array([1,2,2,2,3,4,1,2,2,2,3,4,1,2,2,2,3,4,1,2])

In [91]: take_sliced_regions(a, start=1, take=3, skip=3)
Out[91]: array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55606525

复制
相关文章

相似问题

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