将计算值元素添加到多维numpy数组的快速方法

时间:2012-10-05 10:56:54

标签: 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(abs(horizontal) > 1.0 or abs(vertical) > 1.0))

此循环按预期工作,但与其他numpy函数相比非常慢。对于中等大小的图像,这需要30秒不可接受。

有不同的方法来进行相同的计算但更快吗?不必保留原始图像数组。

1 个答案:

答案 0 :(得分:4)

您可以将图像的组件分开,然后使用多个图像:

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.)