对于这样的3D阵列:
import numpy as np
m = np.random.rand(5,4,3)
删除所有满足此类条件的元素的有效方法是什么?
m [:,:,0]> 0.5&m [:,:,1]> 0.5&m [:,:,2] <0.5
答案 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切入这些协调,我们通过广播给了他们新的价值。