Python 向多维numpy数组添加计算值元素的快速方法
我有一个numpy数组“image”,它是一个二维数组,其中每个元素有两个组件。我想将其转换为另一个二维数组,其中每个元素有三个组件。前两个和由前两个计算出的第三个,如下所示:Python 向多维numpy数组添加计算值元素的快速方法,python,optimization,numpy,Python,Optimization,Numpy,我有一个numpy数组“image”,它是一个二维数组,其中每个元素有两个组件。我想将其转换为另一个二维数组,其中每个元素有三个组件。前两个和由前两个计算出的第三个,如下所示: for x in range(0, width): for y in range(0, height): horizontal, vertical = image[y, x] annotated_image[y, x] = (horizontal, vertical, int(a
for x in range(0, width):
for y in range(0, height):
horizontal, vertical = image[y, x]
annotated_image[y, x] = (horizontal, vertical, int(abs(horizontal) > 1.0 or abs(vertical) > 1.0))
此循环的工作原理与预期相同,但与其他numpy函数相比速度非常慢。对于中等大小的图像,这需要不可接受的30秒
是否有不同的方法进行相同的计算,但速度更快?不必保留原始图像阵列。您只需分离图像的组件,然后处理多个图像即可:
image_component1 = image[:, :, 0]
image_component2 = image[:, :, 1]
result = (np.abs(image_component1) > 1.) | (np.abs(image_component2) > 1.)
如果出于某种原因需要指定的布局,还可以构建另一个三维图像:
result = np.empty([image.shape[0], image.shape[1], 3], dtype=image.dtype)
result[:, :, 0] = image[:, :, 0]
result[:, :, 1] = image[:, :, 1]
result[:, :, 2] = (np.abs(image[:, :, 0]) > 1.) | (np.abs(image[:, :, 1]) > 1.)
您可以只分离图像的组件,然后处理多个图像:
image_component1 = image[:, :, 0]
image_component2 = image[:, :, 1]
result = (np.abs(image_component1) > 1.) | (np.abs(image_component2) > 1.)
如果出于某种原因需要指定的布局,还可以构建另一个三维图像:
result = np.empty([image.shape[0], image.shape[1], 3], dtype=image.dtype)
result[:, :, 0] = image[:, :, 0]
result[:, :, 1] = image[:, :, 1]
result[:, :, 2] = (np.abs(image[:, :, 0]) > 1.) | (np.abs(image[:, :, 1]) > 1.)
太棒了,正是我想要的!太棒了,正是我想要的!