【问题标题】:Fast way to add calculated value element to multidimensional numpy array将计算值元素添加到多维 numpy 数组的快速方法
【发布时间】:2012-10-05 10:56:53
【问题描述】:

我有一个 numpy 数组“图像”,它是一个二维数组,其中每个元素都有两个组件。我想将其转换为另一个二维数组,其中每个元素都有三个组件。前两个和第三个是从前两个计算出来的,如下所示:

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 秒。

是否有不同的方法来执行相同的计算但速度更快?不必保留原始图像数组。

【问题讨论】:

    标签: python optimization numpy


    【解决方案1】:

    您可以只分离图像的组件并使用多个图像来代替:

    image_component1 = image[:, :, 0]
    image_component2 = image[:, :, 1]
    
    result = (np.abs(image_component1) > 1.) | (np.abs(image_component2) > 1.)
    

    如果您出于某种原因需要您指定的布局,您也可以构建另一个 3D 图像:

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

    【讨论】:

    • 太棒了,正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多