组成一个由所有17个元素组成的python数组

2024-04-25 20:41:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题与大多数人似乎想要的相反。我正在使用numpy阵列,我必须处理数据采集系统中的一个硬件缺陷。我的数据是成对的uint16,需要分成两个数组。现在,这就是我要做的:

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。你知道吗

使用除之外的所有内容构建一对数组的最有效方法是什么?(注意,我也可以将其应用于rawData数组,而不是两个拆分数组)


Tags: 数据devselfnumpy硬件系统数组open
3条回答

假设数组大小是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]
"""

您可以通过使用整个数组并追溯删除每个元素来执行列表切片。你知道吗

>>> 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]

您可以使用列表理解,如下所示:

>>> 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)范围内的每个nth项,基本上所有数字都以1开始,以99结束。你知道吗

相关问题 更多 >

    热门问题