我有一个2d的布尔值数组,我想将false映射到0(uint8),将true映射到255(uint8),这样我就可以将矩阵用作黑白图像。
目前我有:
uint8matrix = boolMatrix.astype(numpy.uint8)*255
但我认为乘法是增加了不必要的计算。
答案 0 :(得分:1)
bool在numpy中隐式地转换为int;所以简单地用np.uint8(255)相乘就可以了,并为你节省额外的数据传递。
答案 1 :(得分:1)
用于调优,Cython或更简单的python用户Numba,可以给你明智的改进:
from numba import jit
@jit(nopython=True)
def cast(mat):
mat2=empty_like(mat,uint8)
for i in range(mat.shape[0]):
for j in range(mat.shape[1]):
if mat[i,j] : mat2[i,j]=255
else : mat2[i,j]=0
return mat2
对1000x1000随机矩阵的一些测试:
In [20]: %timeit boolMatrix*uint8(255)
100 loops, best of 3: 9.46 ms per loop
In [21]: %timeit cast(boolMatrix)
1000 loops, best of 3: 1.3 ms per loop