在数据立方体中使用列表理解

时间:2018-04-25 12:23:56

标签: python python-3.x numpy

我目前正在尝试使用列表推导来使用一些图像过滤数据立方体上的某些值,但是我迷失了从2开始跳转(正如我们在herehere中看到的那样)到3个维度。

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

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

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

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

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

不要对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

答案 1 :(得分:1)

对于纯Python嵌套列表,请尝试以下方法:

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

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