【问题标题】:Using list comprehension in data cubes在数据立方体中使用列表推导
【发布时间】:2018-10-05 22:20:46
【问题描述】:

我目前正在尝试使用列表推导来过滤带有一些图像的数据立方体上的一些值,但是我迷失了从 2(正如我们在 herehere 中看到的)到 3 维的跳跃.

对于单个图像,完成我想要的代码行是:

AM2 = [[x if x > 1e-5 else 0 for x in line] for line in AM[0]]

如何同时考虑堆叠在彼此顶部的不同图像?我假设我需要添加第三个嵌套循环,但到目前为止我所有的尝试都失败了。

在我的特定情况下,数据立方体由尺寸为 (100x400x900) 的 numpy 数组组成。是否仍建议使用列表推导来过滤该数据量的值?

感谢您的宝贵时间。

【问题讨论】:

  • 正如 FHTMitchell 提到的,您通常不希望将 任何 类型的 Python for 循环与 Numpy 数组一起使用,除非程序逻辑让您别无选择。您应该让 Numpy 为您处理循环,因为它可以以编译速度完成。

标签: python python-3.x numpy


【解决方案1】:

不要对 numpy 数组使用列表推导,你会失去它们的速度和力量。而是使用numpy advanced indexing。例如,你的理解可以写成

AM2 = AM.copy() # USe AM2 = AM.copy()[0] if you just want the first row as in your example
AM2[AM2 < 1e-5] = 0

【讨论】:

    【解决方案2】:

    对于纯 Python 嵌套列表,试试这个:

    AM2 = [[x if x > 1e-5 else 0 for x in line] for A in AM for line in A]
    

    如果这些是 numpy 数组,请参阅@FHTMitchell 的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2018-02-15
      相关资源
      最近更新 更多