关于numpy强制类型转换的问题

关于numpy强制类型转换的问题

目录

numpy强制类型转换

numpy类型强制转换api

numpy数据类型转换astype,dtype

1.查看数据类型

2.转换数据类型

3.字符串数组转换为数值型

numpy强制类型转换

今天用numpy遇到一个关于类型转换的问题,

import numpy as np A = np.array([1,2,3,4,5,6,7,8,9])    A[0]=3.2 print(A) # [3 2 3 4 5 6 7 8 9]

可以发现A[0]=3.2,被强制转换成整型3了。发生的原因是A的类型是np.int,赋值浮点数,会自动转为整型。

这样的问题一旦出现很难发现,在写成程序时要提前想好要用的np类型。

补充,两个整型np.array做运算时,会根据运算自动转换类型。

A = np.array([1,2,3,4,5,6,7,8,9]) B = np.array([2,3,4,5,6,7,8,9,10]) print(A/B) # [0.5    0.66666667    0.75    0.8     0.83333333       0.85714286   0.875      0.88888889    0.9 ] numpy类型强制转换api

有时候我们从文件读取的numpy类型就不是我们想要的,需要强制转换

A = np.array([1,2,3,4,5,6,7,8,9])   A.dtype = 'float'   # 不能为dtype赋予类型,数据会出错 A.astype('float')  # 正确做法 numpy数据类型转换astype,dtype 1.查看数据类型 In [11]: arr = np.array([1,2,3,4,5]) In [12]: arr Out[12]: array([1, 2, 3, 4, 5]) // 该命令查看数据类型 In [13]: arr.dtype Out[13]: dtype('int64') In [14]: float_arr = arr.astype(np.float64) // 该命令查看数据类型 In [15]: float_arr.dtype Out[15]: dtype('float64') 2.转换数据类型 // 如果将浮点数转换为整数,则小数部分会被截断 In [7]: arr2 = np.array([1.1, 2.2, 3.3, 4.4, 5.3221]) In [8]: arr2 Out[8]: array([ 1.1   ,  2.2   ,  3.3   ,  4.4   ,  5.3221]) // 查看当前数据类型 In [9]: arr2.dtype Out[9]: dtype('float64') // 转换数据类型  float -> int In [10]: arr2.astype(np.int32) Out[10]: array([1, 2, 3, 4, 5], dtype=int32) 3.字符串数组转换为数值型 In [4]: numeric_strings = np.array(['1.2','2.3','3.2141'], dtype=np.string_) In [5]: numeric_strings Out[5]: array(['1.2', '2.3', '3.2141'], dtype='|S6') // 此处写的是float 而不是np.float64, Numpy很聪明,会将python类型映射到等价的dtype上 In [6]: numeric_strings.astype(float) Out[6]: array([ 1.2, 2.3, 3.2141])

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读