1、如何调用Numpy:
import numpy as np
2、ndarray的生成方式:
1、使用array直接从原有数据类型转换:
list = [1,2,3,4]
nd = np.array(list) //转换list数组
list2 = [[1,2],[3,4]]
nd2 = np.array(list2)
2、随机数生成:
nd3 = np.random.random([3,3]) //生成一个3*3的随机矩阵
print(nd3)
np.random.seed(154) //设置随机数的种子
nd4 = np.random.random([2,3])
np.random.shuffle(nd4) //打乱数组顺序
print(nd4)
3、特殊矩阵生成:
nd5 = np.zeros([3,3]) //生成全是0的矩阵
nd6 = np.ones([3,3]) //生成全是1的矩阵
nd7 = np.eye(3) //生成指定长度矩阵,对角值为1
nd8 = np.diag([1,2,3]) //生成对角矩阵,矩阵长宽为数组长度,对角值为数组对应位置值
nd27 = np.linspace(-1,1,3) //生成一个(-1,1)的数组,元素个数为3,所以步长为(1-(-1)+1)/3,也就是加1关系,值为[-1,0,1]
nd28 = np.random.normal(0,0.5,[5,5]) //生成一个正态分布的值,以0为中心,偏差值为0.5,生成格式为5*5的矩阵
4、利用arange生成矩阵:
nd9 = np.arange(11) //从0开始,到11-1停止,每次迈进一步
nd10 = np.arange(2,10,0.5) //从2开始,到10-1停止,每次迈进0.5步
5、通过random.savetxt和random.loadtxt保存读取本地文件获得:
nd11 = np.random.random([2,3])
np.savetxt(X=nd11,fname='./test2.txt')
nd12 = np.loadtxt('./test2.txt')
3、ndarray存取元素:
1、一般的选取:
nd13 = np.random.random([5,5])
nd13[4] //将第4+1行取出来
nd13[2:4] //从第2+1行取到5-1行
nd13[1:4:2] //从第1+1行取到5-1行,并从第一个开始每隔2-1行取一次
nd13[::-2] //从最后一行开始倒序,并从第一个开始每隔2-1行取一次
nd13[2:4,1:3] //取从第2+1行开始,到5-1行的第1+1列到4-1列
nd13[(nd13<0.5)&&(nd13>0.2)] //将值小于0.5但是大于0.2的筛选出来
nd13[1:3:] 或者nd13[:2:4] //取2到3行或者取3到4列
2、利用random.choice随机排序抽取:
nd14 = np.arange(5)
nd15 = np.random.choice(nd14,size=(3,4),replace=False,p=[0.1,0,0.6,0.4,0.2]) //随机从nd14抽取指定矩阵的值,并设定不允许重复,在p中规定每个数值可能抽到的概率
3、矩阵操作:
nd16 = np.arange(9).reshape([3,3]) //修改一个一维数组为二维矩阵
nd16 = np.transpose(nd16) //将nd16的x与y轴对调,所对应的值也对调
nd16 = np.transpose(nd16.reshape([1,3,3]),(1,0,2)) //将nd16修改为三维数组,并把[1,3,3]改为[3,1,3]的数据结构
4、数据合并和展平:
1、一维合并:
nd17 = np.arange(4)
nd18 = np.arange(4,8)
nd19 = np.append(nd17,nd18) //拼接
nd20 = np.concatenate([nd17,nd18]) //另外一种拼接
2、多为数组合并:
nd21 = np.arange(4).reshape(2,2)
nd22 = np.arange(4).reshape(2,2)
nd23 = np.append(nd21,nd22,axis=0) //axis=0是按行合并,1是按列合并,None是先拉平再合并
3、展平矩阵:
nd24 = np.arange(6).reshape(2,-1) //二维为2,一维拉平
print(nd24.ravel('F')) //按照列拉平为一维
print(nd24.revel()) //按照行拉平为一维
5、矩阵加法运算:
nd25 = np.arange(4).reshape(2,2)
nd26 = np.arange(4).reshape(2,2)
print(nd25+nd26) //如果两个数组长宽不一样会进行选择扩充,类似3.2的随机选取然后在运算
6、后缀操作
nd29 = np.random.random((2,5))
print(nd29.shape) //输出各维度的个数即(2.5)
print(nd29.reshape(5,2)) //修改维度为(5,2)形,需要注意修改前后的各维度个数相乘的值要一样
print(nd29.dtype) //返回数据的数据类型,即float64
print(nd29.astype(np.float32).dtype) //修改数据类型为float32,即返回float32
print(nd29.ndim) //返回维度,这里返回2
疑问:
1、list和array的区别:
首先是python两大数据类型,list和array区别:
list 看起来是数组其实什么值都可以存,他可以理解为一个指针数组,因为存的实际上是指针,所以塞值的什么地址给指针都合情合理。
array 则是规范化的list,要求存的数据必须类型是一致的,而他只能保存基础的数据类型,比如整数、浮点数、字符。
2、np.random.random和np.random.rand的区别
两者都是生成一个(0,1)之间的随机数,他们之间的区别是传参不同,random只接受元组,即合起来的数据,而rand是接受分开的数据。直观的例子就是:
random((3,3))
rand(3,3)