numpy 矩阵乘法_一起学习Python常用模块——numpy
关注微信公众号:一个数据人的自留地
作者介绍
知乎@王多鱼
百度的一名推荐算法攻城狮。
主要负责商品推荐的召回和排序模型的优化工作。
1
前言
Python在数据科学、机器学习、AI领等域中占据主导地位,目前对于数据分析师和算法工程师来说是必备技能。
对于数据分析师来说,应掌握基础语法和数据科学的模块,主要包括:pandas、numpy和机器学习库sklearn等。
对于算法工程师来说,还应掌握深度学习相关模块,主要包括:tensorflow、pytorch等。
Python语法简单,入门容易,Numpy是Python中科学计算的核心库。它提供了一个高性能的多维数组对象,以及用于处理这些数组的工具。如果你想要进入Python中的数据科学或机器学习,你就要必须学习它。
一起入坑学习吧~
2
加载Numpy库
import numpy as np
3
array结构
NumPy 的数组类(array class)叫做 ndarray,同时我们也常称其为数组(array)。注意 numpy.array 和标准 Python 库中的类 array.array 是不同的。标准 Python 库中的类 array.array 只处理一维的数组,提供少量的功能。ndarray 还具有如下很多重要的属性:
ndarray.ndim:显示数组的轴线数量(或维度)。
ndarray.shape:显示在每个维度里数组的大小。如 n 行 m 列的矩阵,它的 shape 就是(n, m)。
一起尝试创建6个不同维度的array,如下:
a = np.array([1, 2, 3])b = np.array([(1.5, 2, 3), (4, 5, 6)], dtype = float)c = np.array([[(1.5, 2, 3), (4, 5, 6)], [(3, 2, 1), (4, 5, 6)]], dtype = float)d = np.arange(10,25,5)e = np.full((2, 2), 7)f = np.eye(2) print("a: \n", a)print("\nb: \n", b)print("\nc: \n", c)print("\nd: \n", d)print("\ne: \n", e)print("\nf: \n", f) """结果:a: [1 2 3]b: [[1.5 2. 3. ] [4. 5. 6. ]]c: [[[1.5 2. 3. ] [4. 5. 6. ]] [[3. 2. 1. ] [4. 5. 6. ]]]d: [10 15 20]e: [[7 7] [7 7]]f: [[1. 0.] [0. 1.]]"""
4
查看abc的属性
print("a的维度: ", a.shape)print("\na的长度: ", len(a))print("\nb的维度数量: ", b.ndim)print("\nb的元素数量: ", b.size)print("\nb的元素类型: ", b.dtype)print("\nc的元素类型名称: ", c.dtype.name)print("\n转换c的元素类型为int型: \n", c.astype(int)) """结果:a的维度: (3,)a的长度: 3b的维度数量: 2b的元素数量: 6b的元素类型: float64c的元素类型名称: float64转换c的元素类型为int型: [[[1 2 3] [4 5 6]] [[3 2 1] [4 5 6]]]"""
5
创建数组的函数
print("\n创建3x4的0矩阵: \n", np.zeros((3,4)))print("\n创建2x3x4的1矩阵: \n", np.ones((2,3,4), dtype=np.int16))print("\n创建以10开始,以25结束,两个数间隔为5的数组: \n", np.arange(10,23,5)) #Create an array of evenly, spaced values (step value)print("\n创建以0开始,以2结束,间隔数为(2-0)/(9-1)长度为9的数组: \n", np.linspace(0,2,9)) #Create an array of evenly, spaced values (number of samples)print("\n创建2x2的7矩阵: \n", np.full((2,2),7))print("\n创建2x2的单位矩阵: \n", np.eye(2))print("\n创建2x2的随机数矩阵: \n", np.random.random((2,2)))print("\n创建3x2的空矩阵: \n", np.empty((3,2))) """结果:创建3x4的0矩阵: [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]创建2x3x4的1矩阵: [[[1 1 1 1] [1 1 1 1] [1 1 1 1]] [[1 1 1 1] [1 1 1 1] [1 1 1 1]]]创建以10开始,以25结束,两个数间隔为5的数组: [10 15 20]创建以0开始,以2结束,间隔数为(2-0)/(9-1)长度为9的数组: [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]创建2x2的7矩阵: [[7 7] [7 7]]创建2x2的单位矩阵: [[1. 0.] [0. 1.]]创建2x2的随机数矩阵: [[0.0681172 0.75448098] [0.92933939 0.70908987]]创建3x2的空矩阵: [[1.39069238e-309 1.39069238e-309] [1.39069238e-309 1.39069238e-309] [1.39069238e-309 1.39069238e-309]]"""
6
Numpy的基础运算
# 基础运算# (1)加法add_result1 = b + aadd_result2 =np.add(b,a)print("\n加法1的结果: \n", add_result1)print("\n加法2的结果: \n", add_result2) # (2)减法subtract_result1 = a - bsubtract_result2 = np.subtract(a,b)print("\n减法1的结果: \n", subtract_result1)print("\n减法2的结果: \n", subtract_result2) # (3)乘法multiply_result1 = a * bmultiply_result2 = np.multiply(a,b)print("\n乘法1的结果: \n", multiply_result1)print("\n乘法2的结果: \n", multiply_result2) # (4)除法divide_result1 = a / bdivide_result2 = np.divide(a,b)print("\n除法1的结果: \n", divide_result1)print("\n除法2的结果: \n", divide_result2) # (5) 指数函数print("\n矩阵b的指数结果: \n", np.exp(b)) # (6)平方根函数print("\n矩阵b的平方根结果: \n", np.sqrt(b)) # (7)正弦函数print("\n数组a的正弦结果: \n", np.sin(a)) # (8)余弦函数print("\n矩阵b的余弦结果: \n", np.cos(b)) # (9)对数函数print("\n数组a的对数结果: \n", np.log(a)) # (10)矩阵乘法print("\n矩阵e与矩阵f的矩阵乘法结果: \n", e.dot(f)) """结果:加法1的结果: [[2.5 4. 6. ] [5. 7. 9. ]]加法2的结果: [[2.5 4. 6. ] [5. 7. 9. ]]减法1的结果: [[-0.5 0. 0. ] [-3. -3. -3. ]]减法2的结果: [[-0.5 0. 0. ] [-3. -3. -3. ]]乘法1的结果: [[ 1.5 4. 9. ] [ 4. 10. 18. ]]乘法2的结果: [[ 1.5 4. 9. ] [ 4. 10. 18. ]]除法1的结果: [[0.66666667 1. 1. ] [0.25 0.4 0.5 ]]除法2的结果: [[0.66666667 1. 1. ] [0.25 0.4 0.5 ]]矩阵b的指数结果: [[ 4.48168907 7.3890561 20.08553692] [ 54.59815003 148.4131591 403.42879349]]矩阵b的平方根结果: [[1.22474487 1.41421356 1.73205081] [2. 2.23606798 2.44948974]]数组a的正弦结果: [0.84147098 0.90929743 0.14112001]矩阵b的余弦结果: [[ 0.0707372 -0.41614684 -0.9899925 ] [-0.65364362 0.28366219 0.96017029]]数组a的对数结果: [0. 0.69314718 1.09861229]矩阵e与矩阵f的矩阵乘法结果: [[7. 7.] [7. 7.]]"""
7
Numpy的聚合函数
Numpy有很多有用的统计函数,用于从数组中给定的元素中查询最大、最小、标准差等。
print("\n数组a的和: \n", np.sum(a))print("\n数组a的最小值: \n", np.min(a))print("\n矩阵b在axis=0维度上的最大值: \n", np.max(b, axis=0))print("\n矩阵b在axis=0维度上的累加值: \n", np.cumsum(b, axis=0))print("\n数组a的平均值: \n", np.mean(a))print("\n矩阵b的全局中位数: \n", np.median(b))print("\n数组a自身的皮尔逊积矩相关系数: \n", np.corrcoef(a))print("\n矩阵b的全局标准差: \n", np.std(b))print("\n矩阵b在axis=1维度上的标准差: \n", np.std(b, axis=1)) """结果:数组a的和: 6数组a的最小值: 1矩阵b在axis=0维度上的最大值: [4. 5. 6.]矩阵b在axis=0维度上的累加值: [[1.5 2. 3. ] [5.5 7. 9. ]]数组a的平均值: 2.0矩阵b的全局中位数: 3.5数组a自身的皮尔逊积矩相关系数: 1.0矩阵b的全局标准差: 1.5920810978785667矩阵b在axis=1维度上的标准差: [0.62360956 0.81649658]"""
8
索引数组的方法
(1)整数组索引
print("数组a的第3个元素: ", a[2])print("矩阵b的第2行第3列的元素: ", b[1, 2]) """结果:数组a的第3个元素: 3矩阵b的第2行第3列的元素: 6.0"""
表现在图中,即为:
(2)切片(Slicing):与Python列表类似,可以对numpy数组进行切片。由于数组可能是多维的,因此必须为数组的每个维指定一个切片:
print("\n数组a的前2个元素: \n", a[0:2])print("\n矩阵b的前2行的第2列的元素: \n", b[0:2, 1])print("\n矩阵b的第一行的元素: \n", b[:1])print("\n矩阵c的第0维的第2列的元素: \n", c[1,...])print("\n数组a反转: \n", a[::-1]) """结果:数组a的前2个元素: [1 2]矩阵b的前2行的第2列的元素: [2. 5.]矩阵b的第一行的元素: [[1.5 2. 3. ]]矩阵c的第0维的第2列的元素: [[3. 2. 1.] [4. 5. 6.]]数组a反转: [3 2 1]"""
(3)布尔型索引
print("数组a的小于2的元素: ", a[a<2])print("矩阵b的大于4的元素: ", b[b>4]) """结果:数组a的小于2的元素: [1]矩阵b的大于4的元素: [5. 6.]"""
(4)Fancy索引
9
Array常用操作
Numpy中数组的连接函数主要有如下3个:
concatenate: 沿着现存的轴连接数据vstack: 竖直堆叠数据(行方向)hstack: 水平堆叠数据(列方向)
10
线性代数API
如下仅展示了简单的矩阵运算更多详细的方法可在实践中遇到在查找 API。如下展示了矩阵的转置、求逆、单位矩阵、矩阵乘法、矩阵的迹、解线性方程和求特征向量等基本运算。
import numpy as np a = np.array([[1.0, 2.0], [3.0, 4.0]])print(a)"""[[ 1. 2.] [ 3. 4.]]""" a.transpose()"""array([[ 1., 3.], [ 2., 4.]])""" np.linalg.inv(a)"""array([[-2. , 1. ], [ 1.5, -0.5]])""" u = np.eye(2) # unit 2x2 matrix; "eye" represents "I"print(u)"""array([[ 1., 0.], [ 0., 1.]])""" j = np.array([[0.0, -1.0], [1.0, 0.0]])print(np.dot (j, j)) # matrix product"""array([[-1., 0.], [ 0., -1.]])""" print(np.trace(u)) # trace# 2.0 y = np.array([[5.], [7.]])print(np.linalg.solve(a, y))"""array([[-3.], [ 4.]])""" print(np.linalg.eig(j))"""(array([ 0.+1.j, 0.-1.j]), array([[0.70710678+0.j, 0.70710678-0.j], [0.00000000-0.70710678j, 0.00000000+0.70710678j]]))"""
一个数据人的自留地是一个助力数据人成长的大家庭,帮助对数据感兴趣的伙伴们明确学习方向、精准提升技能。
扫码关注我,带你探索数据的神奇奥秘
我知道你在看哟
numpy 矩阵乘法_一起学习Python常用模块——numpy相关推荐
- numpy二维数组改变某些数_机器学习:Python常用库——Numpy库
从前面的学习中我们知道,机器学习是以大量数据为基础的. 由此就引出一个问题:那么多的数据我们要如何处理呢? 别担心,嘻嘻,Python开发人员早有准备. 为了拓宽数据科学方面的应用,Numpy库应运而 ...
- python numpy矩阵乘法_高维Python-Numpy矩阵乘法
哈,只需一行即可完成:np.einsum('nmk,nkj->mj',A,B).在 不要将变量命名为sum,而是重写sum中的内部版本.在 正如@Jaime指出的,对于这些尺寸的维度,循环实际上 ...
- numpy矩阵乘法_NumPy矩阵乘法
numpy矩阵乘法 NumPy matrix multiplication can be done by the following three methods. NumPy矩阵乘法可以通过以下三种方 ...
- 通过矩阵乘法性能优化学习CUDA
通过矩阵乘法性能优化学习CUDA 概述 GPU Architecture GPU中的几个基本概念 物理概念: 软件概念: cuda内存模型 小结: 补充: CUDA shared memory和线程束 ...
- python常用模块-调用系统命令模块(subprocess)
python常用模块-调用系统命令模块(subprocess) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. subproces基本上就是为了取代os.system和os.spaw ...
- 实战篇一 python常用模块和库介绍
# -_-@ coding: utf-8 -_-@ -- Python 常用模块和库介绍 第一部分:json模块介绍 import json 将一个Python数据结构转换为JSON: dict_ = ...
- 对于python来说、一个模块就是一个文件-python常用模块
python常用模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用pyt ...
- Python常用模块——目录
Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...
- Python 常用模块大全
Python 常用模块大全(整理) OS 模块 #os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在 ...
最新文章
- Linux学习之系统编程篇:孤儿进程和僵尸进程(描述对象都是子进程)
- 点击home键_iPhone小技巧:无Home键iPhone11如何强制重启?
- Winform截图小程序
- Linux 系统查看网卡配置信息
- 计算机电源 3842,UC3842开关电源保护的几个技巧及电路图
- Shopee平台不活跃商品清理规则更新
- 算法系列之二十一:实验数据与曲线拟合
- 群晖日历同步到android,用群晖calander日历做华为手机、ipad、mac三方通讯录和日历同步 2020-12-28...
- 《52讲轻松搞定网络爬虫》读书笔记 - HTTP基本原理
- 软考中级【数据库系统工程师】第1章:计算机系统知识,自学软考笔记,备考2022年5月份软考,计算机硬件系统CPU组成指令寄存器组总线输入输出的程序控制方式计算机体系结构与存储系统加密技术流水线技术
- 当Proteus 8 Professional打开出现:已使用符号sMKRORIGIN但未在库中找到.
- 记忆犹新的定时任务的bug
- ubuntu16.04安装ROS Kinetic步骤及安装出现的问题解决
- 可以在线编译运行代码的网站(支持Python)
- 团战可以输、提莫必须死 oj
- 计算机辅助设计师是什么级别,电脑辅助设计,计算机辅助设计工程师工资待遇及月薪是多少...
- Matlab imshow(f,G)函数使用时出现错误
- 778cn显示计算机故障,松下KX-MB778CN一体机出现呼叫维修2是什么问题
- 国外科技网站设计灵感
- Unity3D :树
热门文章
- 干货 | 一文概览主要语义分割网络,FCN、UNet、SegNet、DeepLab 等等等等应有尽有
- ubuntu中linux内核的编译、更换与使用
- Linux驱动编程 step-by-step (五)主要的文件操作方法实现
- 即插即用的轻量注意力机制ECA--Net
- 高并发分布式系统中生成全局唯一(订单号)Id
- 【java读书笔记】——java的异常处理
- 《Adobe Premiere Pro CC经典教程》——14.6 特殊颜色效果
- unistd.h 中int access(const char * pathname, int mode); 判断进程能否以mode模式访问pathname文件(可以用来判断文件/目录是否存在)...
- 多线程调用同一个方法,局部变量会共享吗
- golang 引用相对路径package