高效从现有数组创建新numpy数组
我有一个现成的numpy数组(uint8),它看起来是这样的:
(这些值是8位的,我只对最后3位感兴趣)
[
[ 00000AAA, 00000BBB, 00000CCC ],
[ 00000FFF, 00000EEE, 00000DDD ],
[ 00000GGG, 00000HHH, 00000III ],
[ 00000LLL, 00000KKK, 00000JJJ ]
]
最后,我希望数据能变成这个样子:
[01AAABBB, 01CCCDDD 01EEEFFF, 01GGGHHH, 01IIIJJJ, 01KKKLLL]
另外,每隔一行的数据是反转的。
现在我有一段很长很复杂的代码,它逐行逐列地遍历原始列表,移动和添加数据,但这样效率不够高。
有没有什么好的高效的方法来解决这个问题呢?
1 个回答
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)