Python 使用函数参数为函数内的2D numpy数组编制索引

Python 使用函数参数为函数内的2D numpy数组编制索引,python,function,numpy,slice,Python,Function,Numpy,Slice,假设我有一个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之间的列绘制图像,即

假设我有一个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:800300:500]的内容作为参数传递给函数会导致错误

谢谢你的帮助或链接。
Greg

这是不可能的,因为当不直接用作
切片时,
[…]
是一个语法错误,但您可以执行以下操作:

  • 仅给出相关的切片图像-不使用单独的参数
    ShowImage(npimage[200:800300:500])
    (无逗号)

  • 或者给出一个
    slice
    tuple
    作为参数:
    ShowImage(npimage,(slice(200800),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.

嘿,谢谢你,这很好用。不过,我更喜欢第二种解决方案。