一、基础概念

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。

二、创建数组

import numpy as np

#利用arange创建数组

a1 = np.arange(12) #默认从0开始,直到12(但不包括12),步长为1

print(a1) #打印 [ 0 1 2 3 4 5 6 7 8 9 10 11]

a2 = np.arange(3,12) #从3开始,直到12(但不包括12),步长为1

print(a2) #打印 [ 3 4 5 6 7 8 9 10 11]

a3 = np.arange(3,12,2) #从3开始,直到12(但不包括12),步长为2

print(a3) #打印 [ 3 5 7 9 11]

a4 = np.arange(6,12,0.5) #从6开始,直到12(但不包括12),步长为0.5

print(a4) #打印 [ 6. 6.5 7. 7.5 8. 8.5 9. 9.5 10. 10.5 11. 11.5]

#重定义数组形状

a5 = a1.reshape(3,4) #将数组定义为三行四列

print(a5.shape) #打印 (3,4)

print(a5)

'''

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

'''

#计算数组元素个数

print(a5.size) #打印 12

#查看数组元素类型

print(a4.dtype) #打印 float64

print(a5.dtype) #打印 int32

————————————————

import numpy as np

#利用list创建数组

a1 = np.array([1,2,3,4,5,6]) #使用整数列表

print(a1) #打印[1 2 3 4 5 6]

a2 = np.array([1.2,2.4,3.6]) #使用小数列表

print(a2) #打印[1.2 2.4 3.6]

list = [x for x in range(1,13)]

print(list) #打印 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

a3 = np.array(list)

print(a3) #打印 [ 1 2 3 4 5 6 7 8 9 10 11 12]

#数据类型

print(type(a3)) #打印

#创建二维数组

a4 = np.array([(1,2,3,4),(5,6,7,8)]) #使用元组创建

a5 = np.array([[1.1,2.2],[3.3,4.4]]) #使用小数创建

#指定元素类型

a6 = np.array([1,2,3,4,5,6],dtype=complex)

print(a6) #打印 [1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j 6.+0.j]

a7 = np.array([1,2,3,4,5,6],dtype=np.float32)

print(a7) #打印 [1. 2. 3. 4. 5. 6.]

a8 = np.array([1,0,0,1,1,0,1],dtype=bool)

print(a8) #打印 [ True False False True True False True]

————————————————

import numpy as np

#使用linspace创建数组

a1 = np.linspace(0,10,5) #首位是0,末位是10,含有5个数的等差数列

print(a1) #打印 [ 0. 2.5 5. 7.5 10. ]

a2 = np.linspace(10,50,5) #首位是10,末位是50,含有5个数的等差数列

print(a2) #打印 [10. 20. 30. 40. 50.]

#使用ones创建矩阵

a3 = np.ones((3,4)) #创建3*4的全1矩阵

print(a3)

'''

[[1. 1. 1. 1.]

[1. 1. 1. 1.]

[1. 1. 1. 1.]]

'''

#使用zeros创建矩阵

a4 = np.zeros((3,4)) #创建3*4的全0矩阵

print(a4)

'''

[[0. 0. 0. 0.]

[0. 0. 0. 0.]

[0. 0. 0. 0.]]

'''

#使用eye创建N阶单位矩阵

a5 = np.eye(4)

print(a5)

'''

[[1. 0. 0. 0.]

[0. 1. 0. 0.]

[0. 0. 1. 0.]

[0. 0. 0. 1.]]

'''

#使用empty创建矩阵

a6 = np.empty((2,3)) #创建2*3随意无用数字占位的矩阵

print(a6)

'''

[[8.09759659e-312 8.09761242e-312 8.09769921e-312]

[1.95818994e-306 6.23036978e-307 1.86919785e-306]]

'''

#使用random创建矩阵

a7 = np.random.random((2,3)) #创建2*3随机数占位的矩阵

print(a7)

'''

[[0.85418275 0.45365831 0.96878586]

[0.94365989 0.13162742 0.16894064]]

'''

#将二维矩阵拉成一维矩阵

a8 = a7.ravel()

print(a8) #打印 [0.85418275 0.45365831 0.96878586 0.94365989 0.13162742 0.16894064]

————————————————

三、矩阵运算

import numpy as np

#矩阵运算

a1 = np.arange(1,7).reshape(2,3)

a2 = np.ones((2,3),dtype=np.int)

print(a1)

'''

[[1 2 3]

[4 5 6]]

'''

print(a2)

'''

[[1 1 1]

[1 1 1]]

'''

#矩阵相加

print(a1+a2)

'''

[[2 3 4]

[5 6 7]]

'''

#矩阵相减

print(a1-a2)

'''

[[0 1 2]

[3 4 5]]

'''

#矩阵相乘

print(a1*a2)

'''

[[1 2 3]

[4 5 6]]

'''

#矩阵相除

print(a2/a1)

'''

[[1. 0.5 0.33333333]

[0.25 0.2 0.16666667]]

'''

#矩阵乘方

print(a1**2)

'''

[[ 1 4 9]

[16 25 36]]

'''

'''

以上运算都是矩阵中对应元素的计算

下面介绍矩阵乘法,是两个矩阵之间的乘法,要求第一个矩阵的列要等于第二个矩阵的行

'''

#矩阵转置

a3 = a2.transpose()

print(a3)

'''

[[1 1]

[1 1]

[1 1]]

'''

a4 = a2.T

print(a4)

'''

[[1 1]

[1 1]

[1 1]]

'''

#矩阵点乘

print(a1.dot(a3))

'''

[[ 6 6]

[15 15]]

'''

'''

矩阵的逆:对于矩阵A,若存在AB=E,则矩阵B为矩阵A的逆

'''

#矩阵的逆

a5 = np.eye(3,3)

print(lg.inv(a5)) #单位矩阵的逆是自己本身

'''

[[1. 0. 0.]

[0. 1. 0.]

[0. 0. 1.]]

'''

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

import numpy as np

#矩阵的其他计算

a = np.arange(1,13).reshape(3,4)

print(a)

'''

[[ 1 2 3 4]

[ 5 6 7 8]

[ 9 10 11 12]]

'''

#每行求和()

print(np.sum(a,axis=1)) #打印 [10 26 42]

#每列求和()

print(np.sum(a,axis=0)) #打印 [15 18 21 24]

'''

容易看出,行求和与列求和相差的只有axis的取值

在numpy中,所有涉及行列相关的,axis=0都是计算各列,axis=1都是计算各行

下面的各个运算都遵循这个规则,故演示时只演示其一

'''

#矩阵最小值

print(np.min(a)) #矩阵最小值,打印 1

print(np.min(a,axis=1)) #各行最小值,打印 [1 5 9]

print(np.argmin(a)) #最小值的下标,此处打印 0

#矩阵最大值

print(np.max(a)) #矩阵最大值,打印 12

print(np.max(a,axis=0)) #各列最大值 打印 [ 9 10 11 12]

print(np.argmax(a)) #最大值的下标,此处打印 11

#矩阵平均值

print(np.mean(a)) #矩阵平均值,打印 6.5

print(np.mean(a,axis=1)) #各行平均值,打印 [ 2.5 6.5 10.5]

#矩阵方差

print(np.var(a)) #矩阵方差,打印 11.916666666666666

print(np.var(a,axis=1)) #各行方差,打印 [1.25 1.25 1.25]

#矩阵标准差

print(np.std(a)) #矩阵标准差,打印 3.452052529534663

print(np.std(a,axis=1)) #各行标准差,打印 [1.11803399 1.11803399 1.11803399]

————————————————

四、矩阵切片

import numpy as np

a = np.arange(1,13).reshape(3,4)

print(a)

'''

[[ 1 2 3 4]

[ 5 6 7 8]

[ 9 10 11 12]]

'''

#截取第2行

print(a[1,:]) #打印 [5 6 7 8]

'''

numpy可以通过a[x,y]访问一个元素,也可以用a:b表示[a,b]的区间(左闭右开),单个':'则表示从头到尾

所以a[1,:]就表示,访问的行是第二行(行标从0开始),访问的列是':',即列标从0开始直到末尾,故选择的是第二行所有元素

如下,将':'改为'2:4'的话,就表示列号从2开始直到4(左闭右开),即第三列和第四列

'''

#截取第2行的第3、4列

print(a[1,2:4]) #打印 [7 8]

#截取前两行

print(a[:2]) #解释:a[:2]没有',',故表示只选行号,而[:2]表示前两行

'''

[[1 2 3 4]

[5 6 7 8]]

'''

#截取第3列

print(a[:,2]) #打印 [ 3 7 11]

'''

numpy可以通过a[x,y]访问一个元素,也可以用a:b表示[a,b]的区间(左闭右开),单个':'则表示从头到尾

所以a[:,2]就表示,访问的列是第三列(2在逗号之后),访问的行是':',即行标从0开始直到末尾,故选择的是第三列所有元素

'''

#截取第3、4列

print(a[:,2:4])

'''

[[ 3 4]

[ 7 8]

[11 12]]

'''

#按条件截取

b = a[a>6]

print(b) #打印 [ 7 8 9 10 11 12]

#按条件修改矩阵

a[a<6] = 0

print(a)

'''

[[ 0 0 0 0]

[ 0 6 7 8]

[ 9 10 11 12]]

'''

————————————————

五、矩阵连接

import numpy as np

a = np.arange(1,7).reshape(2,3)

b = np.arange(101,107).reshape(2,3)

print(a)

'''

[[1 2 3]

[4 5 6]]

'''

print(b)

'''

[[101 102 103]

[104 105 106]]

'''

'''

行连接,即行不变,列增加

实际项目中表现为数据记录(一行记作一个记录)数目不变,但是记录的属性增加了

'''

c = np.concatenate((a,b),axis=1)

print(c)

'''

[[ 1 2 3 101 102 103]

[ 4 5 6 104 105 106]]

'''

'''

列连接,即列不变,行增加

实际项目中表现为数据属性不变,但是数据记录增加了

'''

d = np.concatenate((a,b),axis=0)

print(d)

'''

[[ 1 2 3]

[ 4 5 6]

[101 102 103]

[104 105 106]]

'''

————————————————

版权声明:本文为CSDN博主「仙咏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_43545322/article/details/107298584

python中两个矩阵之间的点乘_Python基础--数据分析库--Numpy相关推荐

  1. python 两个dict合并,Python 中两个字典(dict)合并_python dict 合并_python 两个dict合并...

    Python 中两个字典(dict)合并_python dict 合并_python 两个dict合并 dict1={1:[1,11,111],2:[2,22,222]} dict2={3:[3,33 ...

  2. python中两个字典如何合并为一个_python怎么合并两个字典

    Python中将两个字典进行合并操作,是一个比较常见的问题.本文将介绍几种实现两个字典合并的方案,并对其进行比较. 对于这个问题,比较直观的想法是将两个字典做相加操作,赋值给结果字典,其代码为: py ...

  3. python中datetime模块是以什么时间为基础_Python基础之datetime模块

    Outline 构建时间对象实例 date实例的构造 time实例的构造 datetime实例的构造 timedelta对象的构造 tzinfo介绍 时间转换 时间对象转字符串 字符串转时间对象 时间 ...

  4. python中字典和集合对象是无序的_Python基础(四):元组、字典和集合

    基础学习第四弹,常用对象:元组.字典和集合 一.元组 1.1 元组的应用场景 思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做? 答:列表?列表可以一次性存储多个数据,但是列表中的数据 ...

  5. python中返回上一步操作的代码_python基础-文件操作

    一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异 ...

  6. Python中怎样改变集合之间的关系?

    Python中怎样改变集合之间的关系?数学中,两个集合关系的常见操作包括:交集.并集.差集.补集.设A,B是两个集合,集合关系的操作介绍如下: 交集是指属于集合A且属于集合B的元素所组成的集合, 并集 ...

  7. python中时间戳、字符串之间转换详解

    [转载]python中时间戳.字符串之间转换详解 (2013-04-30 17:36:07) 转载▼ 标签: 转载 原文地址:python中时间戳.字符串之间转换详解作者:doris0920 1)秒数 ...

  8. Python中两个list取交集、并集、差集以及为字符串str添加、插入特定字符的操作总结

    Python中两个list取交集.并集.差集以及为字符串str添加.插入特定字符的操作总结 Python中两个list取交集.并集.差集 为字符串str添加.插入特定字符的操作总结 Python中两个 ...

  9. python计算两个向量之间的欧氏距离

    python计算两个向量之间的欧氏距离 代码: import numpy as np # 向量的值 feature_1 = np.array([1,2,3]) feature_2 = np.array ...

最新文章

  1. IT职场人生系列之十八:危险职业(上)
  2. 线程基础知识——Windows核心编程学习手札系列之六
  3. JavaSE 基础面试题
  4. 10个 DIV+CSS 需要注意的问题
  5. 写个函数用来对二维数组排序
  6. 夏末浅笑_2014年夏末大Java新闻
  7. JQuery Ajax 使用FormData上传文件对象
  8. Android7.1开机启动wifi adb
  9. BIO | NIO | AIO (Java版)
  10. PHP下载文件(隐藏真实的下载地址)
  11. 二维傅里叶变换简化方式
  12. Linux Stress测压工具安装与使用详解
  13. 安装VidCutter,这是Linux Ubuntu的视频切割器
  14. 手绘几何图形识别(上)
  15. 光驱位改装固态硬盘并装win 和linux双系统
  16. 培训课程通知邮件模板
  17. C#将ip地址转换成长整形数字的代码
  18. 2021年十大数据分析工具排行榜出炉
  19. qt 引发了异常: 写入访问权限冲突。this 是 0x7FF700000000。
  20. Docker部署免安装版tomcat+mysql+其它乱七八糟软件(包含解释为什么这样安装及同理安装的其他方式)

热门文章

  1. pytorch 冻结层操作 + 学习率超参数设置
  2. Redis requires a monkey patched socket library to work with gevent
  3. pycharm快捷键不能用了
  4. 【番外篇1】青龙面板中cron表达式新手入门教程cron的介绍与使用
  5. centos普通用户SSH免密登录
  6. python引用文件 mode写在后面还是前面,python3 文件操作常用mode参数用法详解
  7. powerdesigner 同步mysql 报错_PowerDesigner技巧小结
  8. mysql输出非零列_如何只提取mysql和php中具有非零值的列?
  9. 突发信号matlab,MATLAB信号处理仿真
  10. Eclipse引入spring约束详细教程