NumPy 中,数据类型(Data Type / dtype) 是一个非常重要的概念。它直接影响数组的 内存占用、计算精度和运算性能。本文主要介绍 Python 与 NumPy 中的数据类型,以及如何在 NumPy 中查看、指定和转换数据类型。

1、Python中的数据类型

在 Python 中,常见的内置数据类型包括:

  • string(字符串)
    用于表示文本数据,字符串通常用引号包裹
    例如:"ABC""cjavapy"

  • integer(整数)
    用于表示整数
    例如:-10100

  • float(浮点数)
    用于表示实数
    例如:1.242.42

  • boolean(布尔值)
    用于表示逻辑值
    例如:TrueFalse

  • complex(复数)
    用于表示复数
    例如:1.0 + 2.0j1.5 + 2.5j

⚠️ Python 的这些类型是 动态类型,每个对象都包含额外的元数据,因此在大规模数值计算中效率较低。

2、NumPy 中的数据类型(dtype)

与 Python 不同,NumPy 中的数组要求 元素类型一致,并且每种类型都有明确的 内存大小

NumPy 使用 dtype(data type) 来描述数组中每个元素的数据类型。

NumPy 常见数据类型及字符表示

字符含义
i整数(integer)
u无符号整数(unsigned integer)
b布尔值(boolean)
f浮点数(float)
c复数(complex)
m时间差(timedelta)
M日期时间(datetime)
O对象(object)
S字节字符串(bytes)
UUnicode 字符串
V固定大小的原始内存块(void)

这些类型使 NumPy 在 内存控制和性能优化 上远优于 Python 原生列表。

3、判断数组的数据类型

NumPy 数组对象提供了 dtype 属性,用于查看数组中元素的数据类型。

示例:查看整数数组的数据类型

import numpy as np

arr = np.array([1, 2, 3, 4])
print(arr.dtype)

输出示例:

int64


示例:查看字符串数组的数据类型

import numpy as np

arr = np.array(['c', 'python', 'cjavapy'])
print(arr.dtype)

输出示例:

<U7

说明:

  • U 表示 Unicode 字符串

  • 7 表示字符串最大长度为 7

4、创建具有已定义数据类型的数组

在使用 np.array() 创建数组时,可以通过 dtype 参数 显式指定数据类型

示例:创建字符串类型数组

import numpy as np

arr = np.array([1, 2, 3, 4], dtype='S')
print(arr)
print(arr.dtype)

输出示例:

[b'1' b'2' b'3' b'4']
|S1


指定数据类型大小

对于 iufSU 等类型,还可以指定 字节大小

示例:创建 4 字节整数数组

import numpy as np

arr = np.array([1, 2, 3, 4], dtype='i4')
print(arr)
print(arr.dtype)

输出示例:

[1 2 3 4]
int32

5、值无法转换的问题(ValueError)

如果数组中的某些元素 无法被强制转换为指定类型,NumPy 会抛出 ValueError 异常。

示例:无法将非数字字符串转换为整数

import numpy as np

arr = np.array(['a', '2', '3'], dtype='i')

运行结果:

ValueError: invalid literal for int() with base 10: 'a'

📌 说明:
在指定 dtype 时,应确保所有元素 都可以安全转换

6、转换现有数组上的数据类型

更改已有数组数据类型的推荐方式是使用 astype() 方法。

  • astype()创建数组的副本

  • 原数组 不会被修改

示例:浮点数 → 整数(使用字符)

import numpy as np

arr = np.array([1.1, 2.1, 3.1])
newarr = arr.astype('i')

print(newarr)
print(newarr.dtype)

输出:

[1 2 3]
int32


示例:浮点数 → 整数(使用 Python 类型)

newarr = arr.astype(int)
print(newarr)
print(newarr.dtype)


示例:整数 → 布尔值

import numpy as np

arr = np.array([1, 0, 3])
newarr = arr.astype(bool)

print(newarr)
print(newarr.dtype)

输出:

[ True False  True]
bool

推荐文档