有效地从现有阵列创建新的numpy数组

时间:2014-07-27 13:35:35

标签: python arrays numpy

我有现有的numpy数组(uint8),如下所示:

(值为8位,我只对最后3位感兴趣)

[
    [ 00000AAA, 00000BBB, 00000CCC ],
    [ 00000FFF, 00000EEE, 00000DDD ],
    [ 00000GGG, 00000HHH, 00000III ],
    [ 00000LLL, 00000KKK, 00000JJJ ]
]

最后,我希望以这种形式获得数据:

[01AAABBB, 01CCCDDD 01EEEFFF, 01GGGHHH, 01IIIJJJ, 01KKKLLL]

此外,每隔一行都会颠倒过来。

目前我有一个冗长且缠绕的代码,它逐行地逐行遍历原始列表,移位和添加数据,但这还不够有效。

有没有什么好的和有效的方法来解决这个问题?

1 个答案:

答案 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)