numpy数据类型dtype转换

简介: 这篇文章我们玩玩numpy的数值数据类型转换   导入numpy >>> import numpy as np   一、随便玩玩 生成一个浮点数组 >>> a = np.

 

这篇文章我们玩玩numpy的数值数据类型转换

 

导入numpy

>>> import numpy as np

 

一、随便玩玩

生成一个浮点数组

>>> a = np.random.random(4)


看看信息

>>> a
array([ 0.0945377 ,  0.52199916,  0.62490646,  0.21260126])
>>> a.dtype
dtype('float64')
>>> a.shape
(4,)

 

改变dtype,发现数组长度翻倍!

>>> a.dtype = 'float32'
>>> a
array([  3.65532693e+20,   1.43907535e+00,  -3.31994873e-25,
         1.75549972e+00,  -2.75686653e+14,   1.78122652e+00,
        -1.03207532e-19,   1.58760118e+00], dtype=float32)
>>> a.shape
(8,)


改变dtype,数组长度再次翻倍!

>>> a.dtype = 'float16'
>>> a
array([ -9.58442688e-05,   7.19000000e+02,   2.38159180e-01,
         1.92968750e+00,              nan,  -1.66034698e-03,
        -2.63427734e-01,   1.96875000e+00,  -1.07519531e+00,
        -1.19625000e+02,              nan,   1.97167969e+00,
        -1.60156250e-01,  -7.76290894e-03,   4.07226562e-01,
         1.94824219e+00], dtype=float16)
>>> a.shape
(16,)


改变dtype='float',发现默认就是float64,长度也变回最初的4

>>> a.dtype = 'float'
>>> a
array([ 0.0945377 ,  0.52199916,  0.62490646,  0.21260126])
>>> a.shape
(4,)
>>> a.dtype
dtype('float64')


把a变为整数,观察其信息

>>> a.dtype = 'int64'
>>> a
array([4591476579734816328, 4602876970018897584, 4603803876586077261,
       4596827787908854048], dtype=int64)
>>> a.shape
(4,)


改变dtype,发现数组长度翻倍!

>>> a.dtype = 'int32'
>>> a
array([ 1637779016,  1069036447, -1764917584,  1071690807,  -679822259,
        1071906619, -1611419360,  1070282372])
>>> a.shape
(8,)


改变dtype,发现数组长度再次翻倍!

>>> a.dtype = 'int16'
>>> a
array([-31160,  24990,  13215,  16312,  32432, -26931, -19401,  16352,
       -17331, -10374,   -197,  16355, -20192, -24589,  13956,  16331], dtype=int16)
>>> a.shape
(16,)


改变dtype,发现数组长度再次翻倍!

>>> a.dtype = 'int8'
>>> a
array([  72, -122,  -98,   97,  -97,   51,  -72,   63,  -80,  126,  -51,
       -106,   55,  -76,  -32,   63,   77,  -68,  122,  -41,   59,   -1,
        -29,   63,   32,  -79,  -13,  -97, -124,   54,  -53,   63], dtype=int8)
>>> a.shape
(32,)


改变dtype,发现整数默认int32!

>>> a.dtype = 'int'
>>> a.dtype
dtype('int32')
>>> a
array([ 1637779016,  1069036447, -1764917584,  1071690807,  -679822259,
        1071906619, -1611419360,  1070282372])
>>> a.shape
(8,)

 

二、换一种玩法

很多时候我们用numpy从文本文件读取数据作为numpy的数组,默认的dtype是float64。
但是有些场合我们希望有些数据列作为整数。如果直接改dtype='int'的话,就会出错!原因如上,数组长度翻倍了!!!


下面的场景假设我们得到了导入的数据。我们的本意是希望它们是整数,但实际上是却是浮点数(float64)

>>> b = np.array([1., 2., 3., 4.])
>>> b.dtype
dtype('float64')

 

astype(int) 得到整数,并且不改变数组长度

>>> c = b.astype(int)
>>> c
array([1, 2, 3, 4])
>>> c.shape
(8,)
>>> c.dtype dtype('int32')

 

如果直接改变b的dtype的话,b的长度翻倍了,这不是我们想要的(当然如果你想的话)

>>> b
array([ 1.,  2.,  3.,  4.])

>>> b.dtype = 'int'
>>> b.dtype
dtype('int32')
>>> b
array([         0, 1072693248,          0, 1073741824,          0,
       1074266112,          0, 1074790400])
>>> b.shape
(8,)



三、结论

numpy中的数据类型转换,不能直接改原数据的dtype!  只能用函数astype()

 

目录
相关文章
|
5月前
|
Python
NumPy 教程 之 NumPy 从数值范围创建数组 5
在 NumPy 教程之从数值范围创建数组中,`numpy.linspace` 用于生成一维等差数列数组。
22 2
|
5月前
|
存储 C语言 Python
NumPy 教程 之 NumPy 数据类型 10
NumPy的`dtype`对象详细描述数组数据,包括类型(如整数、浮点、对象)、大小、字节顺序和结构化字段信息。构造`dtype`时可指定对齐和是否复制。例如,定义一个结构化类型`student`含字符串`name`、整数`age`和浮点数`marks`,然后创建一个数组应用该类型,输出显示结构化数据内容。
48 5
|
5月前
|
存储 C语言 Python
NumPy 教程 之 NumPy 数据类型 11
NumPy的`dtype`对象详细描述数组数据的类型、大小、字节顺序及结构。它支持布尔、整数、浮点、复数、时间和日期类型等,与C语言类型相似。通过`numpy.dtype`构造,可指定对齐和复制。每个类型有唯一字符标识,如'b'代表布尔,'i'代表有符号整数,'f'代表浮点数,'c'代表复数,'S'和'U'表示字符串,'V'表示原始数据。字节顺序用'<'或'>'标记。
33 2
|
5月前
|
存储 C语言 Python
NumPy 教程 之 NumPy 数据类型 5
NumPy 的 `dtype` 对象详细描述数组数据的类型、大小、字节顺序等属性,支持结构化类型和子数组。例如,`<i4` 表示小端法的 32 位整数。`numpy.dtype()` 构造函数用于创建 `dtype` 实例,可指定对齐和复制选项。实例:`np.dtype('<i4')` 创建了一个表示小端法整数的 `dtype`,输出为 `int32`。
28 3
|
5月前
|
存储 C语言 Python
NumPy 教程 之 NumPy 数据类型 4
NumPy 的 `dtype` 对象详细描述数组数据的类型、大小、字节顺序及结构,支持C语言式数据类型。例如,`dt = np.dtype('i4')` 创建了一个表示`int32`的 dtype。实例输出显示数据类型为`int32`。字节顺序通过 `<`(小端法)和 `>`(大端法)设置。`numpy.dtype` 构造函数允许指定数据类型、对齐和是否复制。
30 3
|
5月前
|
存储 C语言 Python
NumPy 教程 之 NumPy 数据类型 6
NumPy的`dtype`对象详细描述数组数据,包括类型(如整数、浮点数)、大小、字节顺序和结构化类型字段。构造`dtype`使用`numpy.dtype()`,参数可指定数据类型、对齐和复制选项。实例展示了创建结构化类型`dt`,含一个`int8`类型的'age'字段,输出为`[('age', 'i1')]`。
30 1
|
5月前
|
C语言 索引 Python
NumPy 教程 之 NumPy 数据类型 1
NumPy 提供丰富数据类型,如 bool_、int_(类似 C 的 long)、intc、intp(用于索引)、int8-64 和 uint8-64(无符号整数)。浮点型有 float16-64,以及复数类型 complex64 和 complex128。每个类型对应特定字节数和精度。dtype 对象代表这些类型。
29 1
|
5月前
|
存储 C语言 Python
NumPy 教程 之 NumPy 数据类型 8
NumPy的`dtype`对象详细描述数组数据,包括类型、大小、字节顺序等。它支持结构化类型,允许字段命名。例如,`np.dtype([('age', np.int8)])`创建了一个含年龄字段的类型。实例中,创建数组`a`使用此类型,访问'age'列显示 `[10 20 30]`。`dtype`构造函数接受参数,如`align`和`copy`控制对齐和复制行为。
33 0
|
5月前
|
存储 C语言 Python
NumPy 教程 之 NumPy 数据类型 7
NumPy 的 `dtype` 对象详细描述数组中数据的类型、大小和字节顺序。它支持结构化类型,包括字段名称、数据类型和内存布局。数据类型可通过 `<` 或 `>` 标记字节顺序, `<` 表示小端法,`>` 表示大端法。`numpy.dtype()` 构造函数用于创建 `dtype` 实例,参数包括数据类型对象、对齐标志和复制选项。
32 0
|
5月前
|
存储 C语言 Python
NumPy 教程 之 NumPy 数据类型 9
NumPy的`dtype`对象详细描述数组数据,包括类型(如整数、浮点数)、大小、字节顺序和结构化类型字段。可通过`numpy.dtype()`创建,参数包括数据类型对象、对齐标志和复制选项。例如,定义一个结构化类型`student`,含`name`(字符串)、`age`(整数)和`marks`(浮点数)字段,展示了如何应用到数组。打印`student`显示字段及其类型。
32 0