python - 如何使用条件从多维 numpy 数组中删除子数组?
问题描述
我正在尝试使用条件从多维 numpy 数组中删除子数组。在这个例子中,我想删除所有包含值 999 的子数组。这是我失败的尝试之一:
a = np.array([[[1,2,3], [1,2,3]],
[[999,5,6], [4,5,6]],
[[999,8,9], [7,999,9]]
])
for i in range(0,len(a)):
if 999 in a[i]:
np.delete(a, i, 0)
我想要的结果是:
array([[1,2,3], [1,2,3]])
这只是一个较小的例子,它应该可以帮助我理解一个更大的问题,它看起来像这样:
# win_list_hyper.shape -> (1449168, 233)
# win_list_multi.shape -> (1449168, 12, 5, 5)
win_list_hyper = np.where(win_list_hyper <= 0, -3.40282e+38, win_list_hyper)
win_list_multi = np.where(win_list_multi <= 0, -3.40282e+38, win_list_multi)
# fail!:
for i in range(0,len(win_list_multi)):
if -3.40282e+38 in win_list_multi[i] or -3.40282e+38 in win_list_hyper[i]:
np.delete(win_list_multi, i, 0)
np.delete(win_list_hyper, i, 0)
(顺便说一句。如果您知道如何提高效率,请告诉我!)
解决方案
您的第一次尝试失败,因为np.delete
没有就地操作(即它不修改数组,它返回一个新数组)。此外,在迭代数组时从数组中删除元素通常不是一个好主意(除非您知道自己在做什么)。
您可以np.where
按如下方式使用:
inds = np.where(a == 999) # get indices where value equals 999
np.delete(a, inds[0], axis=0) # delete along first dimension
结果:
array([[[1, 2, 3],
[1, 2, 3]]])
推荐阅读
- spring - 导入 MockMultipartFile 不起作用,我是否使用了正确的依赖项?
- c# - 从 MySql 数据库 C# 返回视图列表
- jena - SelectBuilder 会阻止 sparql 注入吗?
- python - 如何使用 pyspark sql 重新分区
- javascript - RegEx 规则强制开始字符串并允许 Intranet 链接
- c# - 按住键给定毫秒
- arrays - 如何返回在具有约束结构的泛型类中获得的字节数组作为泛型值?
- reactjs - 如何从子组件中获取 formik 道具?
- list - 在 F# List of List 中查找唯一记录
- c# - 如何将核心类库项目中的服务器路径获取到静态方法中