【问题标题】:Python advanced list slicingPython 高级列表切片
【发布时间】:2019-08-10 09:49:50
【问题描述】:

我想使用 Python 减小图像的大小

    import numpy as np
    from skimage import io

    img = io.imread('img.jpg')
    smallImg = img[::2, ::2]

给我原始图像的 50%,因为切片的步长为 2。我怎样才能使它成为原始图像的 90%?

常规的 python 切片对我没有帮助。似乎我不知道如何对列表进行切片,所以它会返回例如第 2、第 3、第 5、第 7 等元素。 假设我有类似的东西:

    arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    arr[::2]

运行上面的代码给了我:

   array([1, 3, 5, 7, 9])

但是,我想与这个结果相反:

   array([2, 3, 5, 6, 8, 9])

【问题讨论】:

  • 你知道:之间的字段是什么意思吗?
  • arr[np.mod(np.arange(arr.size),3)!=0] 会给你想要的输出
  • 考虑到您想要使用切片的目的:对于图像大小调整,仅跳过像素似乎不合适。更好地寻找合适的插值方法...

标签: python arrays numpy slice


【解决方案1】:

我们可以轻松实现指定正确的索引值:

res = arr[np.arange(len(arr)) % 3 != 0]

结果:

In [59]: res
Out[59]: array([2, 3, 5, 6, 8, 9])

【讨论】:

    【解决方案2】:

    使用这种切片方法

    arr[1:3,4:6,7:9]...
    

    或者您可以一次将列表 2 个值切片,将其存储在不同的变量中,然后将列表附加或扩展在一起。

    【讨论】:

      【解决方案3】:

      获取数组([2, 3, 5, 6, 8, 9]) 您必须将代码更改为: arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) arr[1:-1:2] 前面的步骤忘记了

      负索引从最后一项开始 所以索引为 -1 的项目是最后一个 (10) 并且被索引的项目 - 2 在最后一个 (9) 之前,依此类推

      【讨论】:

      • 这不会给出数组([2, 3, 5, 6, 8, 9])。它给出了 array([2, 3, 4, 5, 6, 7, 8, 9]) 。
      • 我已经编辑了它再试一次我现在离我的电脑很远
      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 2016-12-28
      • 2013-09-01
      • 2017-06-24
      • 2015-02-19
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多