从numpy行向量中每隔5和6个元素进行切片

从numpy行向量中每隔5和6个元素进行切片,numpy,numpy-slicing,Numpy,Numpy Slicing,我有这样一个数组:A=([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])并希望从该行向量中提取每5个“和”6个元素,从而得到B=([4,5,9,10,14,15]) 我知道如何提取第五个元素:B=A[::5],但不知道如何依次提取两个值 您可以使用: A[4::5] 要获取数组([4,9,14]),然后使用A[::5]单向使用numpy进行连接和排序: 将numpy导入为np A=np.数组([0,1,2,3,4,5,6,7,8,9,10,11,12,13

我有这样一个数组:
A=([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
并希望从该行向量中提取每5个“和”6个元素,从而得到
B=([4,5,9,10,14,15])

我知道如何提取第五个元素:
B=A[::5]
,但不知道如何依次提取两个值

您可以使用:

A[4::5]
要获取
数组([4,9,14])
,然后使用
A[::5]

单向使用numpy进行连接和排序:

将numpy导入为np
A=np.数组([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
ids=np.ravel(范围(3)中的i的np.array([np.array([4,5])+i*np.array([5,5]))
A[ids]
数组([4,5,9,10,14,15])
您每写一次第5和第6个元素,因此我按以下方式将其取消:

  • 将源系列划分为“部分”,每个部分6个元素
  • 从每个“部分”中提取最后两个元素(第5个和第6个)
因此,预期结果是(与您所写的略有不同):

  • 4和5-第0部分至第5部分的最后2个元素
  • 10和11-第6部分至第11部分的最后2个元素
  • 16-从第三部分(12到17)只取16,因为 源系列不包含17
要仅获取这些元素,您可以运行:

pd.concat([s[4::6], s[5::6]]).sort_index().tolist()
详情:

  • s[4::6]
    -从第5个元素开始的每6个元素(注意指数化 从0开始
  • s[5::6]
    -从第6个元素开始的每个第6个元素
  • concat(…)
    -连接这两个结果
  • sort\u index()
    -恢复原始顺序(假设源 序列具有有序索引)
  • tolist()
    -将上述结果(一系列)转换为普通列表
对于您的数据样本,结果是:

[4, 5, 10, 11, 16]
其他可能的解决方案,这次是基于拆分源系列 分为尺寸为6的零件,并从 各部分:

np.concatenate([ tt[4:] for tt in np.array_split(s.values, np.ceil(s.size / 6)) ]).tolist()

可以构建遮罩并使用遮罩提取元素:

mask = (np.arange(len(A))%6 == np.array([[4],[5]])).any(0)
A[mask]
# array([ 4,  5, 10, 11, 16])

那不应该是
[4,5,10,11,16]