判断多维数组是否为空应使用 arr.size == 0,因其准确反映元素总数为 0;shape 中含 0(即 0 in arr.shape)也等价有效;而 ndim 和 len 单独使用不可靠,且空数组不等于 none。

判断一个多维数组是否为空,关键看它是否包含任何元素,而不是看维度数量或某一层是否为 None。NumPy 中“空”指的是整个数组的元素总数为 0,与 Python 列表的布尔值判断逻辑不同。
用 size == 0 最可靠
NumPy 数组的 size 属性返回所有维度上元素的总个数。只要 arr.size == 0,就说明这个数组不含任何数据,无论它是一维、二维还是更高维。
-
np.array([])→ size = 0 -
np.array([[]])→ size = 0(一维,含一个空子列表) -
np.empty((0, 5))→ size = 0(0 行 × 5 列 = 0 个元素) -
np.zeros((3, 0))→ size = 0(3 行 × 0 列 = 0 个元素)
shape 中含 0 也意味着空
数组的 shape 是一个元组,表示各维度长度。如果任意一个维度长度为 0,整个数组就不可能存下任何元素。
-
np.array([]).shape→(0,) -
np.array([[]]).shape→(1, 0) -
np.empty((0, 4, 2)).shape→(0, 4, 2)
因此,0 in arr.shape 是等价且安全的判断方式,尤其适合需要同时检查结构特征的场景。
不要依赖 ndim 或 len 单独判断
ndim 返回维度数,空数组也可能有多个维度(如 (0, 0, 0)),不能用来判空;len() 只返回第一维长度,对 np.array([[]]) 返回 1,但它实际是空的——所以仅用 len(arr) == 0 会漏判。
- ❌
len(np.array([[]])) == 0→ False(误判为非空) - ✅
np.array([[]]).size == 0→ True(正确)
注意:空数组 ≠ None 或未初始化
NumPy 数组本身不会是 None(除非你手动赋值)。判空前无需做 is not None 检查。但如果你处理的是可能为 None 的变量(比如函数返回值),应先确认对象类型:
- 先确保是
np.ndarray:isinstance(arr, np.ndarray) - 再用
arr.size == 0判空 - 若
arr is None,那它根本不是数组,属于缺失值问题,需单独处理











