从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()
详情:
-从第5个元素开始的每6个元素(注意指数化 从0开始)s[4::6]
-从第6个元素开始的每个第6个元素s[5::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]
?