【问题标题】:Indexing a 2D numpy array inside a function using a function parameter使用函数参数在函数内索引 2D numpy 数组
【发布时间】:2016-07-03 14:07:38
【问题描述】:

假设我在 python 中有一个 2D 图像存储在一个 numpy 数组中并称为 npimage(1024 乘以 1024 像素)。 我想定义一个函数 ShowImage,它将 numpy 数组的切片作为参数:

def ShowImage(npimage,SliceNumpy):
    imshow(npimage(SliceNumpy))

这样它可以绘制图像的给定部分,比如说:

ShowImage(npimage,[200:800,300:500])

将为 200 到 800 之间的行和 300 到 500 之间的列绘制图像,即

imshow(npimage[200:800,300:500])

在 python 中可以做到这一点吗?目前将 [200:800,300:500] 作为参数传递给函数会导致错误。

感谢任何帮助或链接。 格雷格

【问题讨论】:

    标签: python function numpy slice


    【解决方案1】:

    这是不可能的,因为[...] 在不直接用作slice 时会出现语法错误,但您可以这样做:

    • 仅提供相关的切片图像 - 不使用单独的参数 ShowImage(npimage[200:800,300:500])(无逗号)

    • 或将tupleslices 作为参数:ShowImage(npimage,(slice(200,800),slice(300:500)))。这些可用于在函数内部进行切片,因为它们只是定义此切片的另一种方式:

      npimage[(slice(200,800),slice(300, 500))] == npimage[200:800,300:500]
      

    第二种选择的可能解决方案是:

    import matplotlib.pyplot as plt
    def ShowImage(npimage, SliceNumpy):
        plt.imshow(npimage[SliceNumpy])
        plt.show()
    
    ShowImage(npimage, (slice(200,800),slice(300, 500)))
    # plots the relevant slice of the array.
    

    【讨论】:

    • 嘿,谢谢,效果很好。不过我更喜欢第二种解决方案。
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 2015-09-30
    • 1970-01-01
    • 2022-07-08
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多