python - 计算 numpy 数组中变化的位

标签 python numpy char byte bit

我正在使用 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/

相关文章:

python - 如何使用 beautifulsoup 在 span 标签之间进行抓取

python - django/python : Google doc viewer issue with . docx/.xlsx/.pptx

python - 返回不断变化的变量python

python - Windows 7 上的 numpy 安装

c++ - 从 cin 获取输入并将其存储在 char 变量中

python - 在 Python 中捕获输出音频频谱

python - Pytorch - 在 softmax 层之后选择最佳概率

python - 与 Matlab 相比,Numpy 加载 csv 太慢了

c - 跟踪 malloc 分配了多少内存

c# - 替换字符串中的多个字符(创建有效的文件夹名称)