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