首页 > 解决方案 > 如何选择两个 numpy 索引的范围?

问题描述

我有一个简单的 numpy 数组,我想创建一个单独的数组,每两个索引取两个元素

例如:

x = np.arange(0,20)

print(x)
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

我的目标是获得一系列

[2 3 6 7 10 11 14 15 18 19]

我该怎么做?我试过这个:

print(x[1:len(x)-1:2])

[ 1  3  5  7  9 11 13 15 17]

但我只得到其他所有索引。

标签: pythonarraysnumpyjupyterslice

解决方案


您可以使用传统约定简单地做到这一点,start:stop:step而无需任何模数,方法是重塑您的数组、索引,然后将其展平。尝试这个 -

  1. 通过将其重塑为 (-1,2) 您可以创建二元序列
  2. 然后你只需从 1 和步骤 2 开始
  3. 最后你把它压平。
x.reshape(-1,2)[1::2].flatten()
array([ 2,  3,  6,  7, 10, 11, 14, 15, 18, 19])

这应该比使用数学运算来检查每个值的方法要快得多,因为这只是重塑和索引


推荐阅读