Python 性能:高效地切片和反转Numpy阵列
我想计算10种图像:左上角、右上角、左下角、右下角、中间,以及所有镜像图像。图像存储在Numpy数组Python 性能:高效地切片和反转Numpy阵列,python,arrays,performance,numpy,slice,Python,Arrays,Performance,Numpy,Slice,我想计算10种图像:左上角、右上角、左下角、右下角、中间,以及所有镜像图像。图像存储在Numpy数组blob中,形状nx通道x高度x宽度,其中N是源图像的数量 切片的左上角点存储在tls中,切片的右下角点存储在brs中。以下代码提取作物以及每个作物的水平镜像版本: m = 10 if mirror else 5 crops_shape = ((blob.shape[0] * m,) + blob.shape[1:-2] + crop_dimensions) crops = np.empty(sh
blob
中,形状nx通道x高度x宽度
,其中N
是源图像的数量
切片的左上角点存储在tls
中,切片的右下角点存储在brs
中。以下代码提取作物以及每个作物的水平镜像版本:
m = 10 if mirror else 5
crops_shape = ((blob.shape[0] * m,) + blob.shape[1:-2] + crop_dimensions)
crops = np.empty(shape=crops_shape, dtype=blob.dtype)
for i in range(0, blob.shape[0]):
p = i * m
for k, (tl, br) in enumerate(zip(tls, brs)):
crops[p + k] = blob[i, ..., tl[0]:br[0], tl[1]:br[1]]
if mirror:
crops[p + 5:p + 10] = crops[p:p + 5, ..., ::-1]
return crops
例如,对于单个图像,blob
可以具有形状(1、3、226、226)。例如,所有作物都具有相同的大小(227x227),因此在这种情况下,生成的数组作物
将具有形状(10,3,227227)(当镜像
为真时)
不幸的是,当
blob
是float32
数组时,上述方法速度太慢(约1.5ms/image)。有没有办法加快速度?作物的形状是否相同?你能添加一个例子吗?是的,所有作物都有相同的形状,我添加一个例子。作物的形状相同吗?你能添加一个例子吗?是的,所有作物都有相同的形状,我正在添加一个例子。