[英]Count changing bits in numpy array
我正在使用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列的結果數組。
你知道如何做到這一點嗎?
第一步絕對是刪除“ timestamp”和“ ID”列,並確保其不是string
類型。 我不認為您可以擁有一個看起來像您的示例的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)
3,64 (3, 64)
,請合並三個結果,例如:
np.array((aResult, bResult, cResult))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.