
numpy是Python中科学计算的基础包。
它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。
numpy的部分功能如下:
多维性
同质性
高效性
import numpy as np
arr = np.array(5)
# 获取arr的维度;number of dimensions
print(arr.ndim) # 0 import numpy as np
arr = np.array([1,2,3])
# 获取arr的维度;number of dimensions
print(arr.ndim) # 1 import numpy as np
arr = np.array([1,2,3],[4,5,6])
# 获取arr的维度;number of dimensions
print(arr.ndim) # 2arr = np.array([1,'hello'])
print(arr) # ['1','hello']原本在数组中1是数值number,在创建后,会被自动转换为字符串
arr = np.array([1,2.22])
print(arr) # [1. 2.22]浮点数也是一样,number会被转为float浮点数
属性 | 说明 | 示例 |
|---|---|---|
shape | 数组的形状:行数和列数 | arr.shape |
ndim | 维度数量:数组是几维 | arr.ndim |
size | 总元素个数:数组中所有元素的总数 | arr.size |
dtype | 元素类型:数组中元素的类型 | arr.dtype |
---------- | --------------------------- | ----------- |
T | 转置:行列格式互换 | arr.T |
itemsize | 单个元素占用的内存字节数 | arr.itemsize |
nbytes | 数组总内存占用量:size*itemsize | arr.nbytes |
flags | 内存存储方式:是否连续存储(高级优化) | arr.flags |
arr = np.array(1)
print(arr) # 1
print(arr.shape) # ()arr = np.array([1,2,3])
print(arr) # [1 2 3]
print(arr.shape) # (3,)arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.shape) # (3,3)arr = np.array(1)
print(arr) # 1
print(arr.size) # 1arr = np.array([1,2,3])
print(arr) # [1 2 3]
print(arr.size) # 3arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.size) # 6arr = np.array(1)
print(arr) # 1
print(arr.dtype) # int64arr = np.array([1,2.5,3])
print(arr) # [1. 2.5 3.]
print(arr.dtype) # float64arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.dtype) # int64arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.T) # [[1 4] [2 5] [3 6]]上述都属于基本构造
ndarray还有很多构造方式
构造方式 | 说明 |
|---|---|
基础构造 | 适用于手动构建小规模数组或复制已有数据 |
预定义形状填充 | 用于快速初始化固定形状的数组(如全0占位、全1初始化) |
基于数值范围生成 | 生成数值序列,常用于模拟时间序列、坐标网格等 |
特殊矩阵生成 | 数学运算专用(如线性代数中的单位矩阵) |
随机数组生成 | 模拟实验数据、初始化神经网络权重等场景 |
高级构造方法 | 处理非结构化数据(如文件、字符串)或通过函数生成复杂数组 |
用途 | 方法 | |||
|---|---|---|---|---|
基础构造 | np.array() | np.copy() | ||
预定义形状填充 | np.zeros() | np.ones() | np.empty() | np.full() |
基于数值范围生成 | np.arange() | np.linspace() | np.logspace() | |
特殊矩阵生成 | np.eye() | np.diag() | ||
随机数组生成 | np.random.rand() | np.random.randn() | np.random.randint() | |
高级构造方法 | np.array() | np.loadtxt() | np.fromfunction() |
list1 = [1,2,3]
arr = np.array(list1)
print(arr.ndim) # 1
print(arr)# [1 3].array()还有其他参数,例如指定数组类型,指定数组维度,指定复制对象
将其他数组拷贝到新数组
# copy
arr1 = np.copy(arr)
print(arr1) #[1. 2. 3.]arr = np.zeros((2,3),dtype=int)
print(arr)
#[[0 0 0]
# [0 0 0]]# 全1
arr = np.ones((2,3),dtype=int)
print(arr)
# [[1 1 1] [1 1 1]]
# 空,默认是随机数
arr = np.empty((2,3))
print(arr)
# [[5.e-324 5.e-324 5.e-324]
# [5.e-324 5.e-324 5.e-324]] # full 填充
arr = np.full((2,3),666)
print(arr)
#[[666 666 666]
# [666 666 666]]arr = np.arange(1,10,2) # start,end,step(步长)
print(arr)
# [1 3 5 7 9]根据步长,生成从start数开始到end数的数组arr2 = np.linspace(1,10,3) # start,end,slice(间隔)
print(arr2) #[ 1. 5.5 10. ]使用arange()也可以达到相应的效果,但是对数组内个数要求严苛一些
对数间隔
# 对数间隔数列
arr = np.logspace(0,4,5,base=2)
print(arr) # [ 1. 2. 4. 8. 16.]其实这个不难理解,从linspace角度来看
logspace在执行前会先执行linsapce
arr2 = np.linspace(0,4,5)
print(arr2) # [0. 1. 2. 3. 4.]logspace 会拿这个 linspace 生成的数组去取自身 base 数值的次方名称 | 维度 | 示例 | 说明 |
|---|---|---|---|
标量 | 零维 | 5,3 | 单个数字,无行列 |
向量 | 一维 | [1,2,3] | 只有行或列 |
举证 | 二维 | [[1,2,3] [4,5,6]] | 严格的行列结构(二维表) |
张量 | >=三维 | [[1,[5,6][[7,[8,9]],4]] | 高阶数组(如RGB图像) |
矩阵是一个由行和列排列成的矩阵数组
形状:这个矩阵有3行3列,记作 2*3矩阵
元素:矩阵中的每个数字称为元素
矩阵类型 | 定义 | 例子 |
|---|---|---|
零矩阵 | 所有元素为0 | [ 0 0 0 0 ] \begin{bmatrix} 0&0\\0&0 \end{bmatrix} [0000] |
单位矩阵 | 对角线上为1,其余为0 | [ 1 0 0 1 ] \begin{bmatrix} 1&0\\0&1 \end{bmatrix} [1001] |
对角矩阵 | 只有对角线有非零值 | [ 2 0 0 3 ] \begin{bmatrix} 2&0\\0&3 \end{bmatrix} [2003] |
对称矩阵 | A = A T A=A^T A=AT | [ 1 2 2 3 ] \begin{bmatrix} 1&2\\2&3 \end{bmatrix} [1223] |
单位矩阵对角线上为1,其余为0
对角矩阵只有对角线有非零值
对称矩阵
arr = np.eye(3)
print(arr)
#[[1 0 0]
# [0 1 0]
# [0 0 1]]
arr = np.eye(3,5,dtype=int)
print(arr)
#[[1 0 0 0 0]
# [0 1 0 0 0]
# [0 0 1 0 0]]arr = np.diag([1,2,3])
print(arr)
#[[1 0 0]
# [0 2 0]
# [0 0 3]]方法内传递的是你要在对角线上出现的数字
生成0到1之间的随机浮点数(均匀分布)
arr = np.random.rand(2,3)
print(arr)
#[[0.70168642 0.71753434 0.96317388]
# [0.95506805 0.23474415 0.40630574]]生成指定范围区间的随机浮点数(均匀分布)
arr = np.random.uniform(3,6,(2,3))
print(arr)
#[[5.03622931 4.34216028 5.06781859]
# [4.87780163 5.27826677 4.91474848]]均匀随机生成一个从start到end范围之间的row行col列的数组
生成指定范围区间的随机整数(均匀分布)
arr = np.random.randint(3,30,(2,3))
print(arr)
#[[16 29 26]
# [29 22 22]]设置随机种子
np.random.seed(20)
arr = np.random.randint(1,10,(2,5))
print(arr)
#[[4 5 7 8 3]
# [1 7 9 6 4]]arr = np.random.randn(2,3) # (-3到3之间)
print(arr)
#[[ 1.47105787 -0.50274641 -0.65000031]
# [ 1.6759262 -0.26047681 0.84227465]]正态分布存在一个峰值,从峰值处,向两端减小和扩大数值,

逐渐向两段扩大和缩小值并不成立倒数关系
常用的数据有
arr = np.array([2,0,4],dtype='bool')
print(arr) # [ True False True]注意,在使用各类数据类型时,还需要考虑到对应的类型能否符合存储要求
arr = np.arange(0,5000,dtype=np.int8)
print(arr) # [ 0 1 2 ... -123 -122 -121]这里明显已经爆内存了,所以随后数值为负数
不使用int8,改为int16。扩大存储,即可解决问题
arr = np.arange(0,5000,dtype=np.int16)
print(arr)# [ 0 1 2 ... 4997 4998 4999]或者使用无符号整型
arr = np.arange(0,5000,dtype=np.uint)
print(arr)# [ 0 1 2 ... 4997 4998 4999]数据类型表格
数据类型 | 说明 |
|---|---|
bool | 布尔类型 |
int8、uint8int16、uint16int32、uint32int64、uint64 | 有符号、无符号的8位整型有符号、无符号的16位整型有符号、无符号的32位整型有符号、无符号的64位整型 |
float16float32float64 | 半精度浮点型单精度浮点型双精度浮点型 |
complex64complex128 | 用两个32位浮点数表示的复数用两个64位浮点数表示的复数 |