我有现有的numpy数组(uint8),如下所示:
(值为8位,我只对最后3位感兴趣)
[
[ 00000AAA, 00000BBB, 00000CCC ],
[ 00000FFF, 00000EEE, 00000DDD ],
[ 00000GGG, 00000HHH, 00000III ],
[ 00000LLL, 00000KKK, 00000JJJ ]
]
最后,我希望以这种形式获得数据:
[01AAABBB, 01CCCDDD 01EEEFFF, 01GGGHHH, 01IIIJJJ, 01KKKLLL]
此外,每隔一行都会颠倒过来。
目前我有一个冗长且缠绕的代码,它逐行地逐行遍历原始列表,移位和添加数据,但这还不够有效。
有没有什么好的和有效的方法来解决这个问题?
答案 0 :(得分:5)
这是一种使用Numpy内置命令和矢量样式索引的方法,因此它非常紧凑(并且应该比迭代更快):
更新了评论中的建议
# Reverse direction of every second row
unsnaked_array = np.array(inp_array)
unsnaked_array[1::2] = inp_array[1::2, ::-1]
# Change to one long array
unsnaked_array = unsnaked_array.ravel()
unsnaked_array &= 0x7 # Extra safety :)
# Sum every pair of elements (with first element rolled) and add required bit
result_array = (unsnaked_array[::2]<<3) + unsnaked_array[1::2] + (1<<6)