向二维Numpy数组赋值浮点行后该行全零的原因咨询
整数类型Numpy数组赋值浮点数后变为全零的原因
核心原因是Numpy数组的数据类型固定且强类型约束:
- 你创建数组时传入的是整数元素,Numpy会自动推断数组类型为整数型(比如
int32或int64,具体取决于运行环境)。 - 当向整数类型数组赋值浮点数时,Numpy不会自动转换数组类型,而是直接对浮点数执行截断取整操作——也就是直接舍弃小数部分,只保留整数部分。
你的例子里,0.3截断取整后结果为0,所以赋值后整行都变成了0。
验证数组类型
可以通过查看数组的dtype属性确认类型:
>>> import numpy >>> s = numpy.array([[1,0,0],[1,0,0]]) >>> s.dtype dtype('int64') # 部分环境可能显示int32
解决办法
如果需要存储浮点数,有两种可行方式:
- 创建数组时显式指定浮点类型:
>>> s = numpy.array([[1,0,0],[1,0,0]], dtype=numpy.float64) >>> s[1] = numpy.array([.3,.3,.3]) >>> s array([[1. , 0. , 0. ], [0.3, 0.3, 0.3]])
- 对已有的整数数组进行类型转换:
>>> s = s.astype(numpy.float64) >>> s[1] = numpy.array([.3,.3,.3])
内容的提问来源于stack exchange,提问作者Lizhi Guo
相关产品推荐
相关产品推荐

