我有一个多维的NumPy类数组,(我使用Dask,但这适用于NumPy,因为Dask模仿了API),它来自1592个图像的数组:a
:
array([[[ True, True, True, ..., True, True, True],
[ True, True, True, ..., True, True, True],
[ True, True, True, ..., True, True, True],
...,
[ True, True, True, ..., True, True, True],
[ True, True, True, ..., True, True, True],
[ True, True, True, ..., True, True, True]],
...,
[[ True, True, True, ..., True, True, True],
[ True, True, True, ..., True, True, True],
[ True, True, True, ..., True, True, True],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]]])
我想保留蒙版包含False
条目的图像,并删除 * all * True
的图像。我可以用array.all()
这样做:
mask = a.all(axis=1).all(axis=1)
retain = np.where(mask==False,filenames,None)
#write `retain` to a file to be read by another script
其中filenames
是我的文件路径列表。
但是,我不觉得a.all(axis=1).all(axis=1)
非常令人满意。在我看来,这就像我在数组上运行了两次,而一次就足够了。但我有吗
注:a.all(axis=1)
给出:
array([[ True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True],
...,
[False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False]])
并且a.all(axis=1).all(axis=1)
给出:
array([ True, False, False, False, True, True, False, False, False,
...,
False, False, False, True, False, False, False])
在这个例子中,我是否可以更有效地从三维数据转换到一维数据?
1条答案
按热度按时间nnt7mjpx1#
是吗
这比你现在做的要快。请注意,当您对数组进行两次检查时,第二次会更短。你实际上是在
所以第二次你会看到一个更短的数组。
PS:你可以简化你的代码如下。