NumPy常用函数

ndarray 数组创建

常用创建方法

py 复制代码
# 1. 一维数组
a1 = np.array([1,2,3,4])
# 2. 二维数组(嵌套列表)
a2 = np.array([[1,2],[3,4]])
# 3. 指定数据类型
a3 = np.array([1.1, 2.2], dtype=np.float32)
# 4. 元组也可以
a4 = np.array((5,6,7))

快速生成固定值数组

np.full(shape, fill_value):全部填充同一个数字

py 复制代码
#生成一维数组,10个为0
a5 = np.full(10, 0)
#生成二维数组,4个为5
a6 = np.full((2,2), 5)

序列数组

np.arange(start, stop, step, dtype)

py 复制代码
# 1. 只给终点:默认从0开始,步长1
print(np.arange(10))       # [0 1 2 3 4 5 6 7 8 9]

# 2. 起点+终点
print(np.arange(2, 8))     # [2 3 4 5 6 7]

# 3. 起点+终点+步长
print(np.arange(0, 10, 2)) # [0 2 4 6 8]

# 4. 支持小数
print(np.arange(0, 1, 0.2)) # [0.  0.2 0.4 0.6 0.8]

随机数模块(np.random)

py 复制代码
np.random.rand(3)          # 随机数范围[0,1)均匀分布 一维
np.random.rand(2,3)        # 2行3列随机浮点数

设置随机数

py 复制代码
print(np.random.randint(0,5,size=(2,2))) #生成二维数组,0到5的随机数(不包含5)

等比/等差数列

logspace

np.logspace(start_exp, stop_exp, num, base=10)

含义:生成 base 的 start_exp ~ stop_exp 次方,共 num 个等比数

py 复制代码
c1 = np.logspace(0, 2, 5)
print(c1)
# [  1.           3.16227766  10.          31.6227766  100.        ]
# 对应:10^0, 10^0.5, 10^1, 10^1.5, 10^2

linspace

np.linspace(start, stop, num)

适合:需要固定多少个点,不用自己算步长

py 复制代码
c2 = np.linspace(0, 2, 5)
print(c2) # [0.  0.5 1.  1.5 2. ]

NumPy ndarray 常用数组属性

举例数组

py 复制代码
import numpy as np
arr = np.array([[1,2,3],[4,5,6]])

维度 / 形状相关

.ndim

数组维度数量,返回整数

py 复制代码
print(arr.ndim)   # 2,二维数组

.shape

每个维度的长度,返回元组

py 复制代码
print(arr.shape)  # (2,3) 2行3列
# 单独取行数/列数
print(arr.shape[0]) # 行数 2
print(arr.shape[1]) # 列数 3

.size

数组总元素个数 = 各维度相乘

py 复制代码
print(arr.size) # 2*3=6

.itemsize

单个元素占用字节数

py 复制代码
# int64 每个数字占8字节
print(arr.itemsize) # 8

.nbytes

整个数组占用总字节 = size × itemsize

py 复制代码
print(arr.nbytes) # 6*8=48

数据类型相关

.dtype

数组元素的数据类型

py 复制代码
print(arr.dtype) # int64

.dtype.name

类型名字符串

py 复制代码
print(arr.dtype.name) # int64

补充:

虽然.dtype和.dtype.name直接打印出的都是int64,但是他们的类型本质不一样

py 复制代码
print(type(arr.dtype)) # <class 'numpy.dtypes.Int64DType'>
print(type(arr.dtype.name)) # <class 'str'>

数组变形

.reshape

py 复制代码
arr.reshape(2,3)    # 转为2行3列,不修改原数组

.resize

py 复制代码
arr.resize(2,3)     # 原地修改形状

.flatten

py 复制代码
arr.flatten()       # 展平一维(拷贝)

.ravel

py 复制代码
arr.ravel()         # 展平(优先视图,节省内存)

数组类型转换

.astype

py 复制代码
print(arrA.astype(np.float32))

基本函数

常量

py 复制代码
np.pi    # 圆周率
np.e     # 自然常数
np.nan   # 空值
np.inf   # 无穷大

舍入取整函数

例子数组

py 复制代码
x = np.array([1.2, 1.5, -1.5, 2.7])

.ceil

向上取整

py 复制代码
np.ceil(x)    # 向上取整 [2,2,-1,3]

.floor

向下取整

py 复制代码
np.floor(x)   # 向下取整 [1,1,-2,2]

.rint

四舍五入

py 复制代码
np.rint(x)    # 四舍五入 [1.,2.,-2.,3.]

.trunc

截断小数

py 复制代码
np.trunc(x)   # 截断小数 [1,1,-1,2]

.round

指定小数位数

py 复制代码
np.round(x, 1) # 指定小数位数

平方、开方、绝对值

py 复制代码
a = np.array([1, 4, 9, -2])
np.abs(a)        # 绝对值 [1,4,9,2]
np.square(a)     # 平方 [1,16,81,4]
np.sqrt(a[a>=0]) # 平方根,负数会nan
np.cbrt(np.array([-8,8])) # 立方根 [-2,2]

指数 & 对数函数

py 复制代码
np.exp(x)       # e^x
np.exp2(x)      # 2^x

np.log([1, np.e, np.e**2])    # 自然对数 ln
np.log10([1,10,100])          # 以10为底
np.log2([1,2,4])              # 以2为底

二元函数(两个数组对应位置运算)

py 复制代码
np.add(a, b)      # 加 a+b
np.subtract(a,b)  # 减 a-b
np.multiply(a,b)  # 乘 a*b
np.divide(a,b)    # 除 a/b
np.power(a, b)    # 幂 a**b

np.maximum(a,b)   # 对应位置取大
np.minimum(a,b)   # 对应位置取小
np.mod(a,b)       # 取余

条件筛选

三目选择(条件成立取 x,否则取 y)

py 复制代码
np.where(arr > 4, arr * 2, arr + 10)
print(res)
# 大于4的数×2,其余+10

聚合统计函数(整数组 / 按轴计算)

py 复制代码
mat = np.array([[1,2,3],[4,5,6]])
np.sum(mat)        # 全部求和
np.sum(mat, axis=0)# 按列求和
np.sum(mat, axis=1)# 按行求和

np.min(mat)    # 最小值
np.max(mat)    # 最大值
np.mean(mat)   # 均值
np.median(mat) # 中位数
np.var(mat)    # 方差
np.std(mat)    # 标准差

np.argmax(mat) # 最大值索引
np.argmin(mat) # 最小值索引

# 一维
a = np.array([1,2,3])
#cumsum():累积和
#cumprod():累积乘积
print(a.cumsum())   # [1 3 6]
print(a.cumprod())  # [1 2 6]

排序函数

两种用法

arr.sort():原地排序,直接修改原数组,无返回值

np.sort(arr):返回排序后的新数组,不改动原数组

py 复制代码
import numpy as np
a = np.array([3,1,4,2])

# 不修改原数组
s1 = np.sort(a)
print(a)  # [3 1 4 2]
print(s1) # [1 2 3 4]

# 原地修改
a.sort()
print(a) # [1 2 3 4]

多维按轴排序 axis

py 复制代码
mat = np.array([[3,1],[2,4]])
# axis=1 每行内部排序
print(np.sort(mat, axis=1))
#[[1 3]
#[2 4]]

# axis=0 每列内部排序
print(np.sort(mat, axis=0))
#[[2 1]
#[3 4]]

去重函数

np.unique函数参数:

return_counts=True:顺带统计每个元素出现次数

return_index=True:返回元素第一次出现的下标

return_inverse=True:返回原数组映射到唯一值的索引

py 复制代码
nums = np.array([2,2,1,1,3,3,3])
# 基础去重
uniq = np.unique(nums)
print(uniq) # [1 2 3]

# 去重+统计频次
vals, cnt = np.unique(nums, return_counts=True)
print(vals, cnt)

NumPy 矩阵运算

极易混淆运算

* 和 np.multiply():对应元素相乘(哈达玛积),不是矩阵乘法

@ 和 np.dot() 和 np.matmul():标准数学矩阵乘法

元素相乘(对位相乘)

py 复制代码
A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
print(A * B)
# [[ 5 12]
#  [21 32]]

矩阵乘法(线性代数标准乘法)

操作规则为:A列必须等于B行,输出结构为A行B列

py 复制代码
arrA = np.array([[1,0,2],[-1,3,1]])
print(arrA)
#[[ 1  0  2]
#[-1  3  1]]
arrB = np.array([[4,1],[0,5],[-2,3]])
print(arrB)
#[[ 4  1]
#[ 0  5]
#[-2  3]]
# 操作规则为:A列必须等于B行,输出结构为A行B列
print(arrA.dot(arrB))
#[[ 0  7]
#[-6 17]]

计算过程:

相关推荐
风流 少年1 天前
数据分析:numpy
数据挖掘·数据分析·numpy
fai厅的秃头姐!2 天前
数据分析-Numpy
数据挖掘·数据分析·numpy
m沐沐19 天前
【计算机视觉】OpenCV 模板匹配银行卡数字识别---下
人工智能·python·opencv·计算机视觉·pycharm·numpy
云和数据.ChenGuang21 天前
大模型厂商常用的数据库有哪些?
数据库·人工智能·pytorch·深度学习·numpy
MATLAB代码顾问22 天前
Python NumPy数值计算核心指南
开发语言·python·numpy
FBI HackerHarry浩22 天前
解决pip 安装 numpy 时元数据生成失败
numpy·pip
m沐沐24 天前
【计算机视觉】OpenCV 模板匹配银行卡数字识别---上
人工智能·后端·python·opencv·计算机视觉·pycharm·numpy
iRayCheung1 个月前
virtualbox安装的ubuntu系统跑numpy报错
linux·ubuntu·numpy
SilentSamsara1 个月前
scikit-learn 工作流工程化:Pipeline、ColumnTransformer 与自定义转换器
开发语言·人工智能·python·机器学习·青少年编程·numpy·scikit-learn