编写除第17个元素之外的所有元素的python数组

时间:2014-05-05 18:53:44

标签: python arrays numpy

我有一个问题是大多数人似乎想要的倒退。我正在使用numpy数组,我必须处理数据采集系统中的硬件错误。我的数据以成对的uint16形式出现,需要分成2个数组。现在,这就是我正在做的事情:

ql = open('/dev/quicklogic', 'rb')
self.rawData = numpy.fromfile(ql, numpy.uint16, 50000) # grab 50k integers
self.rawFlour = self.rawData[0::2] # deinterlace the array
self.rawScatter = self.rawData[1::2]

因此,将数组拆分为两个数据流非常有效,但设备每17次读取时会发送一对0。

使用除了每17次读取构建一对数组的最有效方法是什么? (注意,我也可以将它应用于rawData数组而不是两个拆分数组)

4 个答案:

答案 0 :(得分:2)

假设您的数组大小是17的倍数。您可以使用reshape

import numpy as np

a = np.arange(17*2)
print a
"""
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 25 26 27 28 29 30 31 32 33]
"""
a = a.reshape(a.size // 17, 17)
print a
"""
[[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16]
 [17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33]]
"""
a = a[:, :-1]
print a
"""
[[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
 [17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32]]
"""
a = a.ravel()
print a
"""
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25
 26 27 28 29 30 31 32]
"""

答案 1 :(得分:2)

您可以使用整个数组进行列表切片,并使用retroactivly删除每个第17个元素。

>>> x = range(10)
>>> del x[::4]  
>>> x
[1, 2, 3, 5, 6, 7, 9]

正如您所看到的,这将从元素0开始删除每个第4个元素。如果您想保留第一个元素,则可以执行此操作:

>>> x = range(10)
>>> del x[3::4] 
>>> x
[0, 1, 2, 4, 5, 6, 8, 9]

答案 2 :(得分:1)

您可以按如下方式使用列表推导:

>>> n = 17
>>> mylist = range(1, 100)
>>> new_list = [mylist[i] for i in range(len(mylist)) if i % n != n-1]
>>> new_list
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> 

这将删除(1, 100)范围内的每个n th 项,基本上所有数字都以1开头并以99结尾。

答案 3 :(得分:1)

这里使用列表理解(i是索引):

>>> a = range(1,100)
>>> a = [x for x in (x for i,x in enumerate(a) if (i+1)%17 != 0)]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

基本思想是跳过每17个i,这是通过跳过满足(i+1)%17的索引来完成的,因为python使用0索引。