【AiLearning】Numpy相关函数用法总结

numpy.array & ny.asarray 函数

语法:numpy.array(a)

作用:将数据a转化为数组格式,ny.array与ny.asarray功能是一样的,不会修改原数组

a=[[1,2,3],[4,5,6],[7,8,9]]
b=np.array(a)
c=np.asarray(a)
a[2]=1 #array与asarray不会修改原数组
print(a)
print(b)
print(c)

[[1, 2, 3], [4, 5, 6], 1]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 2 3]
 [4 5 6]
 [7 8 9]]

数组是有逗号的,矩阵是没有逗号的(二维数组和矩阵的区别)

np.squeeze()函数

语法:numpy.squeeze(a,axis = None)

 1)a表示输入的数组;
 2)axis用于指定需要删除的维度,但是指定的维度必须为单维度,否则将会报错;
 3)axis的取值可为None 或 int 或 tuple of ints, 可选。若axis为空,则删除所有单维度的条目;
 4)返回值:数组
 5)  不会修改原数组;

作用:从数组的形状中删除单维度条目,即把shape中为1的维度去掉。np.squeeze()函数可以删除数组形状中的单维度条目,即把shape中为1的维度去掉,但是对非单维的维度不起作用。

c  = np.arange(10).reshape(2,1,5)
np.squeeze(c,axis=1)

#将指定维度删除,此指定维度为单维度否则会报错
OUT:
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

场景:在机器学习和深度学习中,通常算法的结果表示向量的数组(即包含两对或以上的方括号形式[[]]),如果直接利用这个数组进行画图可能显示界面为空。我们可以利用squeeze()函数将表示向量的数组转换为秩为1的数组,这样利用matplotlib库函数画图时,就可以正常地显示结果。

np.shape()函数

语法:numpy.arange(n).reshape(a, b)   

 1)输入参数可以是一个整数(表示维度),也可以是一个矩阵;
 2)直接用.shape 可以快速读取矩阵或数组的形状,但是当某一维度长度不一致时,读取所有维度时则不能读出长短不一致的维度;
 3)使用shape[0]读取矩阵第一维度的长度,shape[1]读取矩阵第二维度的长度;

作用:读取矩阵长度

x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
x.shape[0] #读取矩阵第一维度的长度,在此为二维矩阵,因此读取的为“行”的长度

#输出OUT
4

np.reshape()函数

语法:numpy.arange(n).reshape(a, b)   

 1)依次生成n个自然数,并且以a行b列的数组形式显示;
 2)若参数出现-1,则表示自动计算某列/行。如reshape(-1, m)即列数固定,行数需要计算;
 3)返回值:数组

作用:表示将此矩阵或者数组重组,以 a行b列的形式表示

场景

reshape(1,-1)转化成1行;

reshape(2,-1)转化成2行;

reshape(-1,1)转化成1列;

reshape(-1,2)转化成2列;

reshapea(a)转化为一维数组;a为数组内所有元素的数量

 

向量、数组和矩阵

向量

在解析几何中,我们把“既有大小又有方向的量”叫做向量,并把可随意平行移动的有向线段作为向量的几何形象。在引进坐标系以后,这种向量就有了坐标表示式— — n个有次序的实数,也就是n维向量。因此,当 n ≤ 3 时,n维向量可以把有向线段作为几何形象,但当n>3 时,n 维向量就不再有这种几何形象,只是沿用一些几何术语罢了。

数组

所谓数组,是有序的元素序列。
这里的概念就没有涉及到空间了,我们通常称的n维数组,这里的维度指的不是空间的维度,而是数据所构成的维度;
下面进行举例说明,

1、一维数组
[1, 2, 3, 4]
这里的数据的维度就只有一维,也就是深度为1,怎么理解呢,比如你要取2,你要怎么做呢,只需要进入第一层,这时候你会找到1,2,3,4这四个元素,直接就能找到2这个元素。

2、二维数组
[[1, 2],[3, 4]]
这里的数据的维度就就有二维,也就是深度为2,怎么理解呢,比如你要取2,你要怎么做呢,首先你要进入进入第一层,这时候你找到的是[1, 2] 和 [3, 4],然后你还得继续往下找,再进入一层,你会找到 1,2,3,4这四个元素,然后找到2这个元素,也就是你进入了两层才找到元素,所以深度为2,维度为二维。

3、三维数组
[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
这里的数据的维度就就有三维,也就是深度为3,怎么理解呢,比如你要取2,你要怎么做呢,首先你要进入进入第一层,这时候你找到的是[[1, 2], [3, 4]] 、 [[5, 6], [7, 8]] ,然后你还得继续往下找,再进入一层,你会找到 [1, 2]、[3, 4]、[5, 6]、 [7, 8] ,然后你还得继续往下找,再进入一层,1、2、3、4、5、6、7、8这8个元素,然后找到2这个元素,也就是你进入了三层才找到元素,所以深度为3,维度为三维。

矩阵

在同济大学线性代数第六版中,矩阵定义如下:由m×n 个数aij (i= 1,2,…,m;j= 1,2,…,n)排成的m 行n 列的数表
在这里插入图片描述
称为m 行n 列矩阵,简称m×n 矩。

二维数组,可以转化为矩阵,但不等同于矩阵

注意:我们通常会说矩阵的维度,这里的维度也不是指的空间,而是指矩阵的行数。

 

np.dot()函数

Numpy数组和矩阵的区别:
1. Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。
2. 在numpy中matrix的主要优势是:相对简单的乘法运算符号。例如,a和b是两个matrices,那么a*b,就是矩阵积;而数组中a*b则是内积(即点乘),两一维数组的内积,则是各元素相乘再求和。
3. matrix 和 array 都可以通过objects后面加.T 得到其转置。但是 matrix objects 还可以在后面加 .H f得到共轭矩阵, 加 .I 得到逆矩阵。
4. 相反的是在numpy里面arrays遵从逐个元素的运算,所以array:c 和d的c*d运算相当于matlab里面的c.*d运算。而矩阵相乘,则需要numpy里面的dot命令 。

5.如果一个程序里面既有matrix 又有array,会让人脑袋大。但是如果只用array,你不仅可以实现matrix所有的功能,还减少了编程和阅读的麻烦。

参考:https://blog.csdn.net/wyl1813240346/article/details/79806207

 

dot()的使用:

dot()返回的是两个数组的点积(dot product)

1.如果处理的是一维数组,则得到的是两数组的內积;

In : d = np.arange(0,9)
Out: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
In : e = d[::-1]
Out: array([8, 7, 6, 5, 4, 3, 2, 1, 0])

In : np.dot(d,e) 
Out: 84

2.如果是二维数组(矩阵)之间的运算,则得到的是矩阵积(mastrix product)。

In : a = np.arange(1,5).reshape(2,2)
Out:
array([[1, 2],
       [3, 4]])

In : b = np.arange(5,9).reshape(2,2)
Out: array([[5, 6],
            [7, 8]])

In : np.dot(a,b)
Out:
array([[19, 22],
       [43, 50]])

参考:https://blog.csdn.net/wyf_zyrs/article/details/84847599

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值