文章目录
一、什么是Numpy
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。英文官方文档,中文文档
二、之前用到的模块
1、linspace()
创建一个具有指定间隔的浮点数的数组。其参数如下官方文档:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
参数含义如下:
start:返回样本数据开始点
stop:返回样本数据结束点
num:生成的样本数据量,默认为50
endpoint:True则包含stop;False则不包含stop
retstep:If True, return (samples, step), where step is the spacing between samples.(即如果为True则结果会给出数据间隔)
dtype:输出数组类型
axis:0(默认)或-1
示例代码如下:
import numpy as np
array=np.linspace(0,100,5,endpoint=True,retstep=True,axis=0)
print(array)
输出一个元祖:
(array([ 0., 25., 50., 75., 100.]), 25.0)
2、meshgrid()
numpy.meshgrid()的作用就是生成网格点坐标矩阵。其参数如下官方文档:
numpy.meshgrid(*xi, copy=True, sparse=False, indexing=‘xy’)
参数含义如下:参考链接
*xi:x1, x2,…, xn。表示网格坐标的一维阵列。
indexing:输出的笛卡尔(‘xy’,默认值)或矩阵(‘ij’)索引。
sparse:bool类型,如果为True,返回一个稀疏矩阵保存在内存中,默认是False。
copy:bool类型,如果是False,返回一个原始数组的视图保存在内存中,默认是True。如果,sparse和copy都为False,将有可能返回一个不连续的数组。而且,如果广播数组的元素超过一个,可以使用一个独立的内存。如果想要对这个数组进行写操作,请先拷贝这个数组。
返回值:
x1,x2,…,xn:ndarray(numpy数组)
示例代码如下:
import numpy as np
x = np.linspace(0,1,3)
#[ 0. 0.5 1. ]
y = np.linspace(0,1,2)
# [0. 1.]
xv,yv = np.meshgrid(x,y)
print('xv:',xv)
print('yv:',yv)
输出如下:
xv: [[0. 0.5 1. ]
[0. 0.5 1. ]]
yv: [[0. 0. 0.]
[1. 1. 1.]]
通过上面的例子,其实可以发现meshgrid函数将两个输入的数组x和y进行扩展,前一个的扩展与后一个有关,后一个的扩展与前一个有关,前一个是竖向扩展,后一个是横向扩展。因为,y的大小为2,所以x竖向扩展为原来的两倍,而x的大小为3,所以y横向扩展为原来的3倍。通过meshgrid函数之后,输入由原来的数组变成了一个矩阵。
3、vstack()和hstack()
两个方法都是用作数据拼接,只不过拼接的维度方向不同,两个方法都只接受一个参数。
3.1、vstack()
vstack要求拼接的数据具用相同的列数,如果列数不同,将会报错。vstack相当于将数据一行一行的向后堆叠,示例代码如下:
import numpy as np
array1=np.array([[0,1,2],[2,3,4]])
array2=np.array([3,4,5])
print(np.vstack(((array1,array2))))
输出:
[[0 1 2]
[2 3 4]
[3 4 5]]
3.2、hstack()
hstack要求数据具有有相同的行数,如果行数不同,将会报错。hstack将同一纬度的数据按照原始数据的顺序合并为一个新的列表,作为该维度新的数据。示例代码如下:
import numpy as np
array1=np.array([0,1,2])
array2=np.array([3,4,5])
print(np.hstack(((array1,array2))))
输出:
[0 1 2 3 4 5]
4、ndarray.T
numpy中的数组其实就是线性代数中的矩阵。矩阵是可以进行转置的。ndarray有一个T属性,可以返回这个数组的转置的结果。示例代码如下:
import numpy as np
array=np.array([[0,1,2],[2,3,4]])
print('原矩阵:',array)
print('转置矩阵:',array.T)
输出:
原矩阵:
[[0 1 2]
[2 3 4]]
转置矩阵:
[[0 2]
[1 3]
[2 4]]
5、arange()
该函数的作用是返回一个有终点和起点的固定步长的排列(可理解为一个等差数组)。其参数如下:
np.arange([start, ]stop, [step, ]dtype=None)
参数含义如下:
- start:起点值;可忽略不写,默认从0开始
- stop:终点值;生成的元素不包括结束值
- step:步长;可忽略不写,默认步长为1
- dtype:默认为None,设置显示元素的数据类型
不同参数个数情况介绍:
- 一个参数时,参数值为终点值,起点取默认值0,步长取默认值1。
- 两个参数时,第一个参数为起点值,第二个参数为终点,步长取默认值1。
- 三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长,其中步长支持小数。
示例代码如下:
import numpy as np
print("np.arange(7): ",np.arange(7))
print("np.arange(3,7): ",np.arange(3,7))
print("np.arange(3,7,2): ",np.arange(3,7,2))
print("np.arange(3,7,0.5): ",np.arange(3,7,0.5))
输出:
np.arange(7): [0 1 2 3 4 5 6]
np.arange(3,7): [3 4 5 6]
np.arange(3,7,2): [3 5]
np.arange(3,7,0.5): [3. 3.5 4. 4.5 5. 5.5 6. 6.5]
6、dot()
获取矩阵乘积,参数如下:
np.dot(a, b, out=None)
示例代码如下:
import numpy as np
print("np.dot(7,2): ",np.dot(7,2))
print("np.dot([3,7],[2,3]): ",np.dot([3,7],[2,3]))
print("np.dot([1,2],[[1,2],[2,3]]): ",np.dot([1,2],[[1,2],[2,3]]))
输出如下:
np.dot(7,2): 14 -----即:7x2=14
np.dot([3,7],[2,3]): 27 -----即:3x2+7x3=27
np.dot([1,2],[[1,2],[2,3]]): [5 8] -----即:矩阵乘法
三、其他常用模块
1、ravel()
ravel函数是将矩阵变为一个一维的数组,示例代码如下:
import numpy as np
array=np.array([[0,1,2],[2,3,4]])
print(array.ravel())
输出:
[0 1 2 2 3 4]