我正在使用 Python3 进行第一步,所以我不确定如何解决以下任务。我想计算 numpy 数组中每个位随时间变化的频率,我的数组如下所示:
第一列:时间戳;第二列:ID;倒数第三列:byte8,...,byte2, byte1, byte0(每字节 8 位)
[[0.009469 144 '00001001' ... '10011000' '00000000' '00000000']
[0.01947 144 '00001000' ... '10011000' '00000000' '00000001']
[0.029468 144 '00001001' ... '10011000' '00000000' '00000011']
...
[0.015825 1428 '11000000' ... '01101101' '00000000' '00000001']
[0.115823 1428 '11000000' ... '01101100' '00000000' '00000000']
[0.063492 1680 '01000000' ... '00000000' '00000000' '00000000']]
任务是计算一段时间内每个 ID 的位变化。结果应如下所示(可以忽略时间戳):
每个 ID 占一行,其中包含:
第一列:ID;第 65 列第二个(更改次数 bit64、更改次数 bit63、...更改次数 bit1、更改次数 bit0)
因此,在这个简短的示例中,应该有一个包含 3 行(ID144、ID1428 和 ID1680)和 65 列的结果数组。
你知道如何实现这一目标吗?
最佳答案
第一步肯定是删除“时间戳”和“ID”列,并确保它不是字符串
类型。我认为您不能有一个看起来像您的示例的numpy
数组(复合dtype
除外,这使事情变得复杂)。对于“ID”,您应该将不同的“ID”分开到不同的数组,例如:
a = yourArray[yourArray[1]==144]
b = yourArray[yourArray[1]==1428]
c = yourArray[yourArray[1]==1680]
由于我没有您的数据,因此我将在这里生成一些随机数据:
a = np.random.randint(0, 256, (16, 8), 'B')
a
应如下所示:
array([[ 46, 74, 78, 41, 46, 173, 188, 157],
[164, 199, 135, 162, 101, 203, 86, 236],
[145, 32, 40, 165, 47, 211, 187, 7],
[ 90, 89, 98, 61, 248, 249, 210, 245],
[169, 116, 43, 6, 74, 171, 103, 62],
[168, 214, 13, 173, 71, 195, 69, 8],
[ 33, 1, 38, 115, 1, 111, 251, 90],
[233, 232, 247, 118, 111, 83, 180, 163],
[130, 86, 253, 177, 218, 125, 173, 137],
[227, 7, 241, 181, 86, 109, 21, 59],
[ 24, 204, 53, 46, 172, 161, 248, 217],
[132, 122, 37, 184, 165, 59, 10, 40],
[ 85, 228, 6, 114, 155, 225, 128, 42],
[229, 7, 61, 76, 31, 221, 102, 188],
[127, 51, 185, 70, 17, 138, 179, 57],
[120, 118, 115, 131, 188, 53, 80, 208]], dtype=uint8)
之后,您可以简单地:
abs(np.diff(np.unpackbits(a, 1).view('b'), axis=0)).sum(0)
获取每一位对应的行方向变化次数:
array([ 7, 9, 7, 7, 9, 12, 10, 6, 7, 8, 8, 7, 7, 6, 7, 9, 8,
7, 11, 9, 8, 7, 5, 7, 7, 9, 6, 9, 8, 7, 9, 7, 6, 10,
8, 12, 5, 5, 5, 9, 7, 9, 8, 12, 9, 8, 5, 5, 5, 8, 10,
10, 7, 6, 7, 8, 7, 8, 5, 5, 11, 7, 6, 8])
这是一个与 ID=144
对应的形状 (64,)
数组。要获得结果 (3, 64)
,请连接三个结果,例如:
np.array((aResult, bResult, cResult))
关于python - 计算 numpy 数组中变化的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53691389/