人工智能之数学(四) ------ 矩阵numpy操作

菜鸟教程 NumPy 教程


一.基本概念

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

  • NumPy 官网 http://www.numpy.org/
  • NumPy 源代码:https://github.com/numpy/numpy
  • SciPy 官网:https://www.scipy.org/
  • SciPy 源代码:https://github.com/scipy/scipy
  • Matplotlib 官网:https://matplotlib.org/
  • Matplotlib 源代码:https://github.com/matplotlib/matplotlib

二. Ndarray

实例 1 :

import numpy as np 
a = np.array([1,2,3])  
print (a)

输出结果如下:

[1, 2, 3]

实例 2 :

# 多于一个维度  
import numpy as np 
a = np.array([[1,  2],  [3,  4]])  
print (a)

输出结果如下:

[[1, 2] 
 [3, 4]]

实例 3 :

# 最小维度  
import numpy as np 
a = np.array([1,  2,  3,4,5], ndmin =  2)  
print (a)

输出如下:

[[1, 2, 3, 4, 5]]

实例 4 :

# dtype 参数  
import numpy as np 
a = np.array([1,  2,  3], dtype = complex)  
print (a)

输出结果如下:

[ 1.+0.j,  2.+0.j,  3.+0.j]

三.矩阵库(Matrix)

全零方阵 :

ndim : 维度(2维) shape : 形状(3,3)

2*4全1矩阵:

元素是随机浮点数3*4矩阵 :

元素是0-5之间的整数(半开区间,不包含5)2*3矩阵

生成单位矩阵(eye(n,k)) : n是维数,k是对角线的位置

生成对角矩阵(diag(a,k)) :

改变形状(reshape) : 要注意能不能整除

np.arange : 生成2 * 3 * 4,范围是0-23的数组

slice(切片)与index :

一维数组

arr[3:8] = -2 : 更改3-8的数组元素

多维数组 :

arr_2[0,1] : 深度是0的第二行
arr_2[0,2,1:] : 深度是0的第三行的第二个数到最后一个数

arr_2[:,:,1] : 第二列

arr_2[0,0:2,1:] : 深度为0,第一 - 二行,第二列到最后一列

arr_2[0,::2,::2] : 深度为0,隔一行取一行,隔一列取一列

找特定的元素 : 维数为3,中间3个数组第一个连起来是0的坐标,第二个数连起来是2的坐标,第三个数连起来是8的坐标,第四个数连起来是10的坐标

也可以使用np.ix_: 交叉相乘的,元素个数为122,第一个[0]是深度,第二个[0,2]是行数,第三个[0,2]是列数,但是注意输出形状为 : (1,2,2)

合并np.vstack(v : 垂直,垂直方向合并) : 第一个轴不同之外,其他要相同,V是指在垂直轴(第一个轴)上(列)要相同

列数要相同 :
arr_5:
arr_6:
合并结果:

np.hstack(h):第二个轴不同之外,其他轴要相同

np.dstack() : 第三个轴不同之外,其他轴要相同(所以三维以上才能用)

np.concatenate : 更多轴合并,比如想要第5轴合并,axis以0开始

如果想要将维度相同,形状相同的矩阵在深度上合并,首先需要对矩阵扩充维度,比如arr_10是3 * 2的矩阵,要扩充成1 * 3 * 2的矩阵 :
np.expand_dims(arr_10,axis = 0)
np.expand_dims(arr_11,axis = 0)
然后用np.concatenate在深度上进行叠加 :
np.concatenate((arr_10,arr_11),arix = 0)
最后得到一个2 * 3 * 2的矩阵

广播机制broadcasting : 方便不同shape下的数组的数学运算

1.两个数组进行加减时,维度不相同的时候要向维度较大的看齐,比如3 *3 *4 + 4,首先用np.expand_dims将4扩充到1 * 1 * 4(在前面扩充,内部做了这个机制)
2.这个就很好理解了,7 * 1 * 8 + 1 * 5 * 1 = 7 * 5 * 8数组

  1. 3 * 3 * 4 + 1 * 1 * 4 3对1 ,4对4因此可以计算
    7 * 2 * 8 + 7 * 5 * 8就不行,因为2*5既没有1,又不相等,就不能计算

案例:

计算:

你可能感兴趣的:(人工智能之数学(四) ------ 矩阵numpy操作)