为何np.arange(4.)与np.zeros((4,))返回float,而np.zeros((4.))报错?
问题原因解析
1. np.arange(4.) 返回float类型数组的原因
np.arange支持传入整数或浮点数作为终止值:
- 当传入
4.(浮点数)时,它会生成从0开始、步长默认1、到4.(不包含)的序列,序列元素都是浮点数,所以最终数组的dtype为float。 - 简言之,
arange的输入数值类型直接决定了输出数组的元素类型。
2. np.zeros((4.)) 报错的核心原因
np.zeros的第一个参数shape要求是整数构成的序列(元组/列表),或者单个整数,这里的关键细节是:
(4.)在Python里不是元组,只是带括号的浮点数表达式,结果就是4.这个float对象。相当于给zeros传了一个float类型的shape参数,而shape的每个维度大小必须是整数,因此触发报错:'float' object cannot be interpreted as an integer。- 划重点:Python里定义单个元素的元组必须加逗号(比如
(4,)),否则括号只是用来改变运算优先级的符号,不是元组的标志。
3. np.zeros((4,)) 正常返回float数组的原因
(4,)是合法的shape元组,内部元素是整数4,完全符合zeros对shape参数的要求:
- 这个参数仅用来指定数组是长度为4的一维数组,而
zeros的默认dtype为float,所以最终生成的数组元素类型就是float——shape只控制数组的维度和大小,和元素类型无关。
内容的提问来源于stack exchange,提问作者Elizabeth S
相关产品推荐
相关产品推荐

