1.Numpy提供两种基本的对象:ndarray(n维数组对象)(用于储存多维数据)和ufunc(通用函数对象,用于处理不同的数据)。
2.numpy的主要优点:ndarray提供了很多数组化的运算,并且可以快读对数组进行操作,不用写循环来操作。
3.numpy是外部的库,使用的话需要导入先,没有库可以安装。
4.使用时候要导入numpy
5.创建ndarry的方法
import numpy as np
#1.使用转换函数将现有的list或者元组转换为ndarry
list1=[[3.14,2.17,0,1,2],[3,44,2.22,55,9]]
nd1=np.array(list1)
print(nd1)
#2.use the random to generate the ndarry
nd2=np.random.random([3,3])
print(nd2)
#指定了seed之后就会生成固定的内容
nd3=np.random.random([3,3])
print(nd3)
#3.使用便捷生成函数zeros、ones等,可可以将生成的结果进行保存
nd4=np.zeros((3,4),int)#默认是float类型
np.savetxt(X=nd4,fname='./test1.txt')
print(nd4)
#4.使用arange和linspace函数生成数组
nd4=np.arange(4,50,12)#4-50 per 12 ,no including 50
print(nd4)
nd5=np.arange(9,-1,-2)#倒着生成需要在步长前添加-
print(nd5)
nd6=np.linspace(0,4,8)#在0-4之间均匀的生成8个,包含起点和终点,等差数列
print(nd6)
nd7=np.logspace(0,4,8,base=2)#等比数列
print(nd7)
6.获取元素
#获取元素
nd8=np.random.random(10)
print(nd8)
print(nd8[3])#从0开始算,其实是第四个
print(nd8[3:6])#索引为3的开始一直到索引为5,不包括6
print(nd8[1:6:2])#索引1到索引5,每隔1个取一个
print(nd8[1:6:1])#每隔0个,也就是挨个取
print(nd8[::-2])#倒序每隔两个
nd9=np.arange(25).reshape([5,5])
print('nd9:',nd9)
print('second and third row:',nd9[1:3,:])#指定行,先行后列
print('second and third row:',nd9[[1,2]])#指定行
print('second and third cloum:',nd9[:,1:3])#指定列
print(nd9[1:5,1:3])#先行后列
print('range[2,8]:',nd9[(nd9>2)&(nd9<8)])#筛选
7.运算
#算数运算
#主要用到的就是乘法:普通乘法(对应元素相乘)和点乘(内积)
A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
C = np.array([3,5,6])
print(A)
print(B)
print(A*B)#数乘
print(np.multiply(A,B))#数乘
print(3*A)#数乘
print(B/3.0)#数乘
D = np.random.rand(4,2)
def softmoid(x):#定义一个函数
return 1/(1+np.exp(-x))
print(D)
print(softmoid(D))
print(softmoid(D).shape)#输出数据的shape,就是形状大小
print(np.shape(D))#函数的形式输出和上面是一样的意思
print(softmoid(D).size)#size是个数
X1 = np.array([[1,2],[3,4]])
X2 = np.array([[5,6,7],[8,9,10]])
print(np.dot(X1,X2))
8.数组变形
#数据变形
#reshape()改变维度,不改变数组本身
X1 = np.arange(10)
print(X1)
print(X1.reshape(2,5))
print(X1.reshape(-1,5))
print(X1)
#resize改变维度,改变数组本身
print(X1.resize(2,5))
print(X1)
#转置
print(X1.T)
#展平如果我们将 order 参数设置为“C”,则意味着数组以行优先顺序展平。
#如果设置了“F”,则数组将按列优先顺序展平。
#仅当“A”在内存中是 Fortran 连续的并且我们将 order 参数设置为“A”时,数组才以列优先顺序展平。
#最后一个顺序是“K”,它以与元素在内存中出现的顺序相同的顺序展平数组。默认情况下,此参数设置为“C”。
print(X1.ravel())#按照行展平,default
print(X1.ravel('F'))#按照列展平
print(X1.ravel('C'))#按照行展平
#flatten 把矩阵转换为向量,这种需求经常出现在卷积网络与全连接层之间。
a =np.floor(10*np.random.random((3,4)))#floor取整
print(a)
print(a.flatten())
#squeeze降维 这是一个主要用来降维的函数,把矩阵中含1的维度去掉,不改变原变量。在PyTorch中还有一种与之相反的操作——torch.unsqueeze
arr1 = np.arange(3).reshape(3,1)
print(arr1)
print(arr1.shape)
print(arr1.squeeze())
print(arr1.squeeze().shape)
print(arr1)
print(arr1.shape)
arr2 =np.arange(6).reshape(3,1,2,1)#
print(arr2)
print(arr2.shape)
print(arr2.squeeze().shape)
print(arr2.squeeze())#去掉了两个维度,就是为1的维度
#transpose 对高维矩阵进行轴对换,这个在深度学习中经常使用,比如把图片中表示颜色顺序的RGB改为GBR
arr3 = np.arange(24).reshape(2,3,4)
print(arr3)
print(arr3.shape)
print(arr3.transpose(1,2,0))#索引代表了如何进行轴对换0和2换,1在和2换
print(arr3.transpose(1,2,0).shape)
9.合并
#数组合并,按照行合并就是按照行往下走,合并到下面;按照列合并就是往右走,放到右边
#1.append
a=np.array([1,2,3])
b=np.array([4,5,6])
print(np.append(a,b))#合并一维数组
c=np.arange(4).reshape(2,2)
d=np.arange(4).reshape(2,2)
print(np.append(c,d,axis=0))#=0按照行合并
print(np.append(c,d,axis=1))#=1按照列合并
#2.concatenate按照指定轴连接数组或矩阵,要连接的那个方向维度大小要一致
e = np.array([[1,2],[3,4]])#2*2
f = np.array([[5,6]])#2*1
print(np.concatenate((e,f),axis=0))
#print(np.concatenate((e,f),axis=1))#列的尺寸不一样 会报错,可以转置之后再拼接
print(np.concatenate((e,f.T),axis=1))
#3.stack 沿着制定轴堆叠数组和矩阵,只是单纯的堆叠
print(np.stack((e,e),axis=0))