You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用np.all创建布尔掩码判断每个内部numpy数组是否为一维?

解决方案

你创建的是object类型的numpy数组,每个元素是独立的numpy数组,直接调用np.ndim(arr)只会返回外层数组的维度(此处为1),所以第一种方法完全不适用——它判断的是外层数组的维度,而非每个子数组的维度。

以下是两种无需显式编写循环/列表推导式的替代方案:

方案1:用np.vectorize封装np.ndim

np.vectorize可以将处理单个元素的函数转为矢量化形式,自动作用于数组的每个元素:

import numpy as np

arr = np.array((np.array(([0, 1, 0])),
                np.array(([1, 2, 4], [7, 8, 9])),
                np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12])),
                np.array(([0, 1, 0], [0, 0, 0], [1, 0, 0], [1, 1, 0])),
                np.array(([0, 1, 0], [0, 0, 0], [1, 0, 0], [1, 1, 0], [0.5, 0.5, 0]))), dtype=object)

vec_ndim = np.vectorize(np.ndim)
mask = vec_ndim(arr) == 1
print(mask)
# 输出:array([ True, False, False, False, False])

注:np.vectorize本质是循环的封装,但它返回标准numpy数组,符合你的需求。

方案2:用np.frompyfunc实现元素级判断

np.frompyfunc是更底层的矢量化工具,可自定义输出类型:

ndim_check = np.frompyfunc(lambda sub_arr: np.ndim(sub_arr) == 1, 1, 1)
mask = ndim_check(arr).astype(bool)
print(mask)
# 输出:array([ True, False, False, False, False])

补充说明

由于你的数组是object类型,numpy无法直接对内部子数组进行原生批量维度判断——object数组的元素是独立Python对象,所有看似"无循环"的方法本质都是底层循环的封装,只是不需要你编写显式循环语法。

内容的提问来源于stack exchange,提问作者Devarapalli Vamsi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:43:13