如何创建含布尔元素的numpy ndarray?手动创建报TypeError原因
报错核心原因
你对np.ndarray构造方法的参数理解错了:它的第一个位置参数是用来定义**数组形状(shape)**的,只接受整数、整数构成的列表/元组作为合法输入,根本不是用来直接传入数组元素值的。
你传入的boo_array[0][0]是numpy.bool_类型的False,属于布尔值而非合法的形状参数,解释器没法把它解析成数组维度长度,自然抛出需要整数参数的类型错误。
至于比较运算生成的二维数组boo_array,第一层索引取到的boo_array[0]是形状(1,)的一维子数组,类型为ndarray是numpy高维数组索引的固定规则——二维数组按单轴索引取到的就是降一维的子数组,这和手动调用构造函数传参的逻辑没有关联,你相当于把索引拿到的元素值错当成了构造函数需要的形状参数,才会出问题。
正确创建布尔类型ndarray的方法
日常开发不要直接调用底层的np.ndarray构造器,这是低阶API,参数要求严格很容易踩坑,用官方推荐的高阶创建接口即可:
- 用
np.array()直接传入元素序列,指定dtype为布尔类型即可,要生成你需要的[False]结构的数组写法如下:
import numpy as np my_boo_arr = np.array([False], dtype=np.bool_) # 验证结构和类型 print(my_boo_arr) # 输出 [False] print(type(my_boo_arr)) # 输出 <class 'numpy.ndarray'> print(type(my_boo_arr[0])) # 输出 <class 'numpy.bool_'>
- 如果要生成固定填充值的布尔数组,可以用对应快捷函数,指定shape和dtype即可:
# 生成形状(1,)、全为False的布尔数组 false_arr = np.zeros((1,), dtype=np.bool_) # 生成形状(1,)、全为True的布尔数组 true_arr = np.ones((1,), dtype=np.bool_)
- 你之前用数组比较运算生成布尔数组的写法本身是合法的,这是numpy广播机制支持的逐元素运算,返回和原数组同形状的布尔数组,通常用于条件筛选场景。
内容的提问来源于stack exchange,提问作者Salih
相关产品推荐
相关产品推荐

