如何基于条件从python 3D数组中删除元素

时间:2019-02-07 05:15:39

标签: python arrays

对于这样的3D阵列:

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

删除所有满足此类条件的元素的有效方法是什么?

  

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

1 个答案:

答案 0 :(得分:1)

您的问题仍然不确定,但是我会回答我认为您要问的问题。您的问题的问题在于,如果我们删除某些元素,您将不会获得适当的张量(多维np数组),因为其中会带有“孔”。因此,除了删除之外,我将写一种方法将这些值设置为np.nan(您可以将它们设置为您认为合适的任何值,例如-1或None等)。为了更清楚一点, 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.array,然后使用np.where检查设置为true的值的协调性。然后,仅从m切入这些协调,我们通过广播给了他们新的价值。