NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。
首先引入numpy
库
python
import numpy as np
ndarray
NumPy 中定义的最重要的对象是称为 ndarray
的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。
ndarray
中的每个元素在内存中使用相同大小的块。 ndarray
中的每个元素是数据类型对象的对象(称为 dtype
)。
从ndarray
对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。 下图显示了ndarray
,数据类型对象(dtype
)和数组标量类型之间的关系。
ndarray
常用属性:
属性 | 含义 |
---|---|
ndim |
维度(轴)的个数 |
shape |
维度,轴,形状大小 |
size |
元素的总个数 |
dtype |
元素的数据类型 |
itemsize |
元素的字节大小 |
python
num = np.random.randn(2,3)
print(num)
print("数据类型:", type(num))
print("维度个数:", num.ndim) # 行数
print("维度大小(n,m):", num.shape)
print("元素总个数:", num.size)
print("元素的数据类型:", num.dtype)
print("元素的字节大小:", num.itemsize)
array
函数
array
具有以下功能:
- 将任意的序列对象转换为数组
- 支持将特定的嵌套序列转换为高维数组
- 自动推断生成的数据类型
python
# 将列表转为数组类型
num1 = np.array([1,2,34])
num2 = np.array([
[1,2, 34],
[34, 2, 1]
])
# 设置元素类型
num3 = np.array([
[1,2,34],
[34,2,1]
], dtype='float32')
print(num1)
print(num2)
print(num3)
zeros
函数
用法与array
函数相似。创建全0数组,默认元素类型是浮点数类型;使用元组指定创建数组的形状。
python
# 创建 3行4列的全0矩阵
num = np.zeros((3,4))
print(num)
ones
函数
与zeros
函数一样,只不过是创建全0数组,默认元素类型是浮点数。
python
# 创建 3行4列的全1矩阵
num = np.ones((3,4))
print(num)
empty
函数
创建一个未初始化的数组。元素为内存中不确定值。
python
# 创建 3行4列的全1矩阵
num = np.empty((3,4))
print(num)
arange
函数
arange()类似于python的内置函数range(),通过指定开始值 、终值 和步长 来创建表示等差数列的一维数组,返回给定间隔内的均匀间隔值,注意得到的结果数组不包含终值。
arange()函数有四个个参数,分别是start(开始值)、stop(终值)、step(步长)和dtype(数组类型)。
开始值可选,默认值是0,包含在数组中。
终止值必选,不包含在数组中。
步长可选,默认是1。
python
# 长度为0到9
num1 = np.arange(10)
print(num1)
# 长度为0到9的偶数
num2 = np.arange(0, 10,2)
print(num2)
# 长度为0到9的奇数
num3 = np.arange(1,10,2)
print(num3)
其他函数
asarray
函数:类似array函数,但若转换对象为数组时,仅创 建一个引用,而array为深拷贝。ones_like
函数:创建一个与指定数组相同形状的全1数组。zeros_like
函数:创建一个与指定数组相同形状的全0数组。empty_like
函数:创建一个与指定数组相同形状的未初始化数组。
数据类型
Numpy 的类型 | C 的类型 | 描述 |
---|---|---|
np.int8 | int8_t | 字节(-128到127) |
np.int16 | int16_t | 整数(-32768至32767) |
np.int32 | int32_t | 整数(-2147483648至2147483647) |
np.int64 | int64_t | 整数(-9223372036854775808至9223372036854775807) |
np.uint8 | uint8_t | 无符号整数(0到255) |
np.uint16 | uint16_t | 无符号整数(0到65535) |
np.uint32 | uint32_t | 无符号整数(0到4294967295) |
np.uint64 | uint64_t | 无符号整数(0到18446744073709551615) |
np.intp | intptr_t | 用于索引的整数,通常与索引相同 ssize_t |
np.uintp | uintptr_t | 整数大到足以容纳指针 |
np.float32 | float | |
np.float64 / np.float_ | double | 请注意,这与内置python float的精度相匹配。 |
np.complex64 | float complex | 复数,由两个32位浮点数(实数和虚数组件)表示 |
np.complex128 / np.complex_ | double complex | 请注意,这与内置python 复合体的精度相匹配。 |
还有许多别名等,详情看:数据类型 | NumPy
数据类型的表示
既可以用类型本身,如np.int32
,也可以用类型名称字符串,例如int32
,还可以用类型代码字符串,例如i4
。
类型转换
使用astype
方法进行数组之间的类型转换。
默认生成一个新数组。
python
num = np.arange(1,10,1.5)
print(num)
num1 = num.astype(int)
print(num1)
数组运算
-
相同形状的数组之间的运算逐元素执行。
-
数组与标量间的运算,将计算参数传递给 数组的每一个元素。
python
num1 = np.array([1, 2, 3])
num2 = np.array([3, 4, 5])
# 相同形状的数组之间的运算逐元素执行。
print(num1 + num2)
# 数组与标量间的运算,将计算参数传递给 数组的每一个元素。
print(num1 + 100)