代码之家  ›  专栏  ›  技术社区  ›  santoku

如何在python中从三维数组中删除基于条件的元素

  •  0
  • santoku  · 技术社区  · 6 年前

    对于这样的三维阵列:

    import numpy as np  
    m = np.random.rand(5,4,3)
    

    有什么方法可以有效地去除所有符合这些条件的元素?

    m[:,:,0]>0.5&m[:,:,1]>0.5&m[:,:,2]<0.5

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ron U    6 年前

    你的问题还没有定义,但我会回答你想问的问题。你的问题是,如果我们去掉一些元素,你就不会得到一个合适的张量(多维NP数组),因为它会有“洞”。因此,我将编写一种方法来将这些值设置为np.nan(您可以将它们设置为您认为合适的值,如-1或无等)。更清楚地说, M中的任何元素都不能同时满足这三个条件 因为它们各自对应不同的元素。直接回答你的问题会给你同样的答案。

    另外,值得一提的是,尽管在这种情况下效率不会降低,因为您无论如何都要检查每个值的条件,但我将编写一种常见的麻木方式:

    m[np.where(m[:,:,:2] > 0.5)] = np.nan
    m[np.where(m[:,:,2] < 0.5)] = np.nan
    

    我们在这里所做的是将满足您的部分条件的所有值设置为np.nan。这是通过创建一个符合条件(即 m[:,:,:2] > 0.5 部分)然后 np.where 检查哪些协调值设置为真。然后,通过只从M开始对这些协调进行切片,我们给了它们一个新的广播价值。