如何创建Numpy 8元组浮点数组?赋值类型异常求助
搞定NumPy 8元组浮点数组的创建问题
嘿,你遇到的问题其实是dtype参数用错啦!'8i'里的i是**整数类型(integer)**的缩写,所以哪怕你赋值浮点数,NumPy也会自动把它截断成整数存起来,这就是为什么你得到[1000 0 ...]的原因。要创建能存浮点数的8元组数组,得把类型和长度都指定对才行。
两种正确的实现方式
这里给你两种靠谱的写法,选哪个都行:
简洁的字符串格式定义
直接用'(f8, 8)'(或者更紧凑的'8f8')来指定:f8表示64位浮点数(也就是float64),后面的8表示每个数组元素是包含8个这样的浮点数的元组。
示例代码:import numpy as np n, m = 2, 3 # 随便举个维度例子 # 方式1:清晰的元组格式 E = np.zeros((n, m), dtype='(f8, 8)') # 方式2:紧凑写法,效果完全一样 # E = np.zeros((n, m), dtype='8f8') E[0, 0][0] = 1000.2 print(E[0, 0]) # 输出会是:[1000.2 0. 0. 0. 0. 0. 0. 0. ]用
np.dtype对象明确构造
如果想更清晰地控制类型结构,可以用np.dtype来定义字段:import numpy as np n, m = 2, 3 # 定义一个包含8个float64元素的字段 tuple_float_dtype = np.dtype([('values', 'float64', 8)]) E = np.zeros((n, m), dtype=tuple_float_dtype) # 赋值的时候要通过字段名访问 E[0, 0]['values'][0] = 1000.2 print(E[0, 0]['values']) # 同样能得到正确的浮点数组
关键要搞懂的点
- NumPy的dtype字符串里,
i对应整数、f对应浮点,数字代表该维度的长度。'8i'其实是创建了每个元素是8个整数的数组,不是“8元组整数”——本质上是形状为(n,m,8)的整数数组,只是显示成元组样子。 - 如果需要32位浮点数,把
f8换成f4(对应float32)就行,灵活调整。
内容的提问来源于stack exchange,提问作者evambivalence
相关产品推荐
相关产品推荐

