算法工程师必备:一篇文章学会90%的Numpy常用知识

你好,我是kelly,今天分享:工作中常用的Numpy操作。

Numpy是Python的一个专注于数值运算的第三方扩展包,提供了丰富的数组操作、线性代数、傅立叶变换和随机数等功能。

几乎是数据挖掘、机器学习、深度学习等方向的必备技能。

这篇文章不展示运行结果,直接展示用法,纯干货,侧重方法总结。

导入方式:

import numpy as np

一、创建数组

1、一维数组

# 从Python列表创建数组
np.array([1, 2, 3, 4, 5]) 

# 创建长度为5的NumPy数组,所有元素都为0
np.zeros((5)) 

# 创建一个随机值数组
np.random.random((5))

# 给定一个步长,创建一个等差数列性质的数组
np.arange(5)

# 在给定范围内,创建指定元素数目、等间隔的数组
np.linspace(0, 2*np.pi, 5)

# 在一个范围内生成n个随机整数样本
np.random.randint(5,10,10)

# 在指定的区间内生成基于对数的等比数组
np.logspace(1, 10,num=20)

2、二维数组

# 创建二维数组
np.zeros((2, 3))

# 一维转为二维
np.arange(20).reshape(4,5)

# 同理,创建三维数组
np.arange(27).reshape(3,3,3)

# 创建全1的数组
np.ones((1,2))

# 创建常数数组
np.full((2,2), 7) 

# 对称数组
np.eye(2) 

# 创建随机数组
a = np.random.random((2,2))

# 创建和指定的数组相同shape的数组
np.empty_like(a)

二、数组属性(对于单个数组而言)

# 数组元素的类型
a.dtype

# 数组元素数目
a.size

# 数组的形状
a.shape

# 单个数组元素所占用的字节数目
a.itemsize

# 数组的维度
a.ndim

# 数组数据所有数据都占用的字节数(不仅仅是数组元素本身占用字节)
a.nbytes

三、数组的常用函数

a = np.arange(10)
a.sum()
a.min()
a.max()
a.cumsum())

# 计算每一列的和
np.sum(x, axis=0) 

# 计算每一行的和
np.sum(x, axis=1)  

# 数学函数
# 三角函数
np.sin

# 平均舍入到给定的小数位数
np.around

# 数组各个元素的下限,向下取整
np.floor

# 数组各个元素的上限,向上取整
np.ceil

# 指数和对数
np.exp

# 自然对数
np.log

# 以10为底的对数,
np.log10

# 取幂之和的对数
np.logaddexp

# 矩阵对应元素相乘
np.multiply

# 根据最小、最大,对数组截断
np.clip(a, a_min=0, a_max=2)

# 逐元素的非负平方根
np.sqrt

# 逐元素最大值
np.maximum

# 数组元素的按元素最小值
np.minimum

# 沿着指定的轴,计算任意百分比下的分位数
np.percentile(a,q=0.25,axis=0)

# 计算中位数、平均值、加权平均值
np.median()
np.mean()
np.average()

# 数组的方差、标准差
np.var()
np.std()

# 计算矩阵的行列式
np.linalg.det()

# 查找并返回非零元素的所有下标。
np.argwhere(a)

# 统计所有非零元素的数目
np.count_nonzero

# 沿着指定维度,返回数组中最大元素的索引
np.argmax(a, axis=0)
np.argmin(a, axis=0)

四、数组shape改变相关函数(对于单个数组而言)

# shape的改变
a = np.arange(25)
a = a.reshape((5, 5))

# 拉直数组,返回一维度数组
a.flatten()

# 将多维数组的元素,展开为一维数组
a.ravel()

# 数组转置
np.transpose(a) 

# 数据滚动
np.rollaxis(a,axis=1)

# 沿着执行维度增加维度
np.expand_dims(a, axis=0)

# 移除指定维度,降低数组的维度
np.squeeze(a, axis=None)

# 沿着水平方向,将数组分割为多个相等的部分
np.hsplit(a, 2)

# 沿着垂直方向,将数组分割为多个相等的部分
np.vsplit(a, 2)

# 重复数组中的元素n次。
np.repeat(a, 2, axis=0)

# 重复一个数组N次来生成另一个数组
a = np.random.random((1, 3))
np.tile(a, 3)
np.tile(a, [3, 1])

五、数组的索引与切片

1、一维度数组

a = np.array([1, 2, 3]) 

# 索取单个元素
a[0]

# 花式索引
# 使用索引序列对数组进行索引
a = np.arange(0, 300, 20)
indices = [0, 6, -2]
b = a[indices]

# 布尔屏蔽
# 根据条件检索数组元素
a = np.linspace(0, 5 * np.pi, 30)
mask = np.sin(a) >= 2
a[mask]

# 缺省索引
a = np.arange(0, 50, 10)
a[:6]
a[a >=20]

# where函数
# 返回使得条件为真的元素
a = np.arange(0, 50, 20)
np.where(a < 16)

2、多维数组

a = np.random.random((2,2))

# 提取第二列(索引1)的所有元素
my_array[:, 1] 
# 选择数组的前2行和第1、第二列
a[:2, 1:3]

# 整数数组索引
a = np.array([[1,2], [3, 4], [5, 6]])
a[[0, 1, 2], [0, 1, 0]]

# 高级切片
# 基于省略号...的切片方式。如果行位置使用省略号,代表选择所有行;如果列位置使用省略号,则选择全部列
# 保留全部行,选择第3列以后的列
a[...,2:]

# 保留第1行之后的行,保留所有列
a[1:,...]

六、数组之间的运算

a = np.array([[1.0, 2.0], [3.0, 4.0]]) 
b = np.array([[5.0, 6.0], [7.0, 8.0]]) 
sum = a + b 
difference = a - b 

# 乘法和除法运算符执行逐元素乘法
product = a * b 
quotient = a / b 


# 广播(Broadcasting),允许numpy在执行算术运算时使用不同形状的数组
a = np.random.random((3, 5))
b = np.random.random((3,))
# 将b加到a的每一行,广播机制
c = a + b  

# 水平方向叠加多个数组
a = np.random.random((3,))
b = np.random.random((3,))
np.hstack((a,b))

# 垂直方向叠加多个数组
np.vstack((a,b))

# 矩阵乘法
matrix_product = a.dot(b) 

# 矩阵乘积,矩阵维度必须相匹配
np.matmul(a, b)

# 通过符号来表示矩阵运算
a = np.arange(0, 6).reshape(2, 3)
b = np.arange(0, 9).reshape(3, 3)
np.einsum('ji',a)
np.einsum('ij,jk',a,b)

说明:下面三种用法等价:

np.einsum('ij,jk',a,b)
np.matmul(a, b)
a @ b

本文原始版本发表链接:

https://mp.weixin.qq.com/s?__biz=MzI2Mjg3NTY5MQ==&mid=2247484870&idx=1&sn=a8065410c91c20c758c07386f2673cfa&chksm=ea453a82dd32b39457de547d7ab6d0728420e7416011e0c929f20f0064c7cba78564b3cb94d8#rd

kelly会在公众号「kelly学技术」不定期更新Python、机器学习、深度学习等文章,感兴趣的朋友可以关注一下,期待与您交流。

作为一个Python算法工程师,以下是一些必备知识点: 1. 数据结构和算法:熟悉常见的数据结构,如数组、链表、栈、队列、树等,并能够理解它们的底层实现和操作。同时需要掌握常见的算法,如排序、查找、递归、动态规划等。 2. 编程基础:熟练掌握Python语言的基础知识,包括变量、数据类型、条件语句、循环语句、函数、类等。了解Python的内置函数和标准库,以及常用的第三方库,如NumPy、Pandas等。 3. 算法设计与分析:能够设计高效的算法解决实际问题,并理解算法的时间复杂度和空间复杂度。熟悉常用算法设计技巧,如贪心算法、分治法、回溯法等。 4. 数据处理与分析:具备数据处理和分析的能力,能够使用Python进行数据清洗、特征提取、数据可视化等工作。熟悉常用的数据处理库,如Pandas、Numpy等。 5. 机器学习与深度学习:了解机器学习和深度学习的基本原理和常见算法,如线性回归、逻辑回归、决策树、支持向量机、神经网络等。熟悉常用的机器学习和深度学习库,如Scikit-learn、TensorFlow、PyTorch等。 6. 算法优化与并行计算:具备算法优化和并行计算的能力,能够使用并行计算框架如MPI、OpenMP等,提升算法的计算性能。 7. 数据库和SQL:熟悉常见的数据库系统,如MySQL、PostgreSQL等,并能够编写高效的SQL查询语句。 8. 编码规范和调试技巧:遵循良好的编码规范,写出可读性高、可维护性强的代码。具备良好的调试技巧,能够快速定位和解决问题。 9. 系统设计与架构:具备系统设计和架构的能力,能够设计高可用、高性能的分布式系统或服务。 10. 持续学习和自我提升:保持持续学习的态度,关注最新的技术趋势和行业动态。参与开源项目、参加技术交流活动,不断提升自己的技术水平。 这些是Python算法工程师必备知识点,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值