python - Numpy:高级切片

标签 python arrays performance numpy slice

我需要一种快速的方法来找到字符串中三个相邻元素中的最小元素,并将其添加到中心元素下的元素中。对于边框元素,只有两个上部元素正在检查。

例如我有一个 numpy 数组:

    [1, 2, 3, 4, 5], 
    [0, 0, 0, 0, 0]

我应该得到这个:

    [1, 2, 3, 4, 5], 
    [1, 1, 2, 3, 4]

我有这个代码:

for h in range(1, matrix.shape[0]):
    matrix[h][0] = min(matrix[h - 1][0], matrix[h - 1][1])
    matrix[h][1:-1] = ...(DONT KNOW, WHAT SHOULD BE HERE!!)
    matrix[h][-1] = min(matrix[h - 1][-2], matrix[h - 1][-1])

因为我有太多数据而且我需要让它变快,所以我如何在不使用更多 for 循环的情况下对其进行计数? 编辑: David-z,这是我的项目)Seam carving

最佳答案

使用numpy.minimum.reduce:

matrix[h][1:-1] = numpy.minimum.reduce([matrix[h-1][0:-2], matrix[h-1][1:-1], matrix[h-1][2:]])

例如:

>>> matrix = numpy.zeros((2,10))
>>> matrix[0, :] = numpy.random.randint(0,100,10)
>>> h = 1
>>> matrix[h][0] = matrix[h-1][:2].min()
>>> matrix[h][1:-1] = numpy.minimum.reduce([matrix[h-1][0:-2], matrix[h-1][1:-1], matrix[h-1][2:]])
>>> matrix[h][-1] = matrix[h-1][-2:].min()
>>> matrix
array([[ 10.,  40.,  90.,  13.,  21.,  58.,  64.,  56.,  34.,  69.],
       [ 10.,  10.,  13.,  13.,  13.,  21.,  56.,  34.,  34.,  34.]])

关于python - Numpy:高级切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39064607/

相关文章:

python - 如果该子列表的任何元素在另一个列表中,如何删除列表(即子列表)中的列表?

java - 如何仅对列表的特定部分进行排序?

javascript - 存储来自随机文本/颜色生成器的响应,比较它们并存储在数组中

javascript - 我怎样才能加快我的数组搜索功能?

java - 性能:单个还是多个 jar ?

javascript - 与普通 JS 相比,React 在移动设备上的表现如何?

python - 使用 python inspect 查看函数中的局部变量

python - 将一个文本文件中的行替换为另一个文本文件中的行

python - PyCharm 无法解析对 PyQT5 模块的引用

python - 如何通过BucketType定义命令错误消息