创建数组 arr=np.array(list/tuple) 里边的元素可以是元素为int的list,也可以是元组, 但是最后数组表现形式都是array([…])
①使用array函数创建,语法格式为array(列表或元组) ②使用其他函数创建如arange、linspace、zeros等创建 ③掌握相关函数的用法import numpy as np
1、一维数组的创建
arr1=np.array([-9,3,4,6]) arr1---返回 array([-9,3,4,6]) 创建数组时可以指定元素的数据类型 arr1=np.array([-9,3,4,6],dtype='str') arr1---返回 array(['-9','3','4','6'])2、维数组的创建
一般通过嵌套列表的形式 arr2=np.array([[1,2,3],[2,3,4],[4,5,6]]) arr2----返回矩阵 三行三列 array([[1,2,3], [2,3,4], [4,5,6]])3、(一维数组)数列的创建
np.arange(0,10,0.5)--- 以0为起始元素,步长为0.5,创建等差数列,到10结束,python 的range函数是 左闭右开,所以不会写到10;4、创建等差数列
np.linspace(1,10,11) --以1位起始位数字,在1-10之间创建11个数字的等差数列 机制为: 1、求公差 (10-1)/(11-1)=0.9 则返回数列为: array([1., 1.9, 2.8 , 3.7 , 4.6 ,5.5 ,6.4 ,7.3 , 8.2 ,9.1 ,10. ]) np.linspace(1,10,11,endpoint= False) endpoint的意思为:将产生的最后一个元素去掉 array([1., 1.9, 2.8 , 3.7 , 4.6 ,5.5 ,6.4 ,7.3 , 8.2 ,9.1 ])5、创建等比数列
np.logspace(1,5, base=2,num=10) 创建以2为底,幂在1-5之间的10个元素的等比数列 机制: ①先创建1之5之间10个元素的等差数列, 等价于 np.linspace(1,5,10) ②以2为底,以上述等差数列的每一个元素为幂求10个元素的等比数列, 等价于 2**np.linspace(1,5,10)6、
np.zeros([5,5]) --元素全部为0的5行5列的二位数组的创建 np.zeros(6) --6个元素全部为0的一维数组的创建 如:np.zeros([4,5]) array([[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]) np.zeros([2,3]) ---错误的,无法创建2行3列的0元素数组,因为函数中的参数不是list or tuple;7、
np.ones(7,6) --元素全部为1的7行6列的二位数组的创建` array([[1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.]])8、
np.eye(7) 单位矩的创建 行数等于列数=6 ,对角线元素为1,其余元素都未0 array([[1., 0., 0., 0., 0., 0., 0.], [0., 1., 0., 0., 0., 0., 0.], [0., 0., 1., 0., 0., 0., 0.], [0., 0., 0., 1., 0., 0., 0.], [0., 0., 0., 0., 1., 0., 0.], [0., 0., 0., 0., 0., 1., 0.], [0., 0., 0., 0., 0., 0., 1.]])9、
np.diag([1,2,3]) 对角矩阵的创建 参数为对角元素,元素个数=行数=列数 array([[1, 0, 0], [0, 2, 0], [0, 0, 3]]) np.diag([1,2,3]) + 1 ---矩阵中的每一个元素都+1 array([[2, 1, 1], [1, 3, 1], [1, 1, 4]])一、简单索引
1、普通索引
矩阵的行数和列数的index从左上角开始,从0开始 arr1[2] ----访问数组arr1的第三(1+2)行,即行索引 arr1[2,3]---访问数组arr1的第三(1+2)行第四(3+1)个元素--2位行索引,3位列索引 arr1[2][1]---访问数组的第三行第二个元素一维数组的切片和list很像,但是数组的处理速度比list快很多
如: arr1=np.arange(1,10,1) ----array([1,2,3,4,5,6,7,8,9]) 倒过来排列 arr1[ : : -1] arr1[-4:-2] 从倒数第四位取到倒数第二位(左闭右开) 元素的修改:及重命名 arr1[5]=12 ----array([1,2,3,4,5,12,7,8,9]) arr1[1,3]=[120,110] 将下标为1和2 的两位元素修改为120、110 ---array([1,120,110,4,5,12,7,8,9])二维数组:
data2=( (1,2,3,4),(2,3,34,34),(23,12,32,4),(45,65,34,23)) arr2=np.array(data2) ---返回 array([1,2,3,4], [2,3,34,34], [23,12,32,4], [45,65,34,23]) arr2[2,3] 注: 访问第三行 第四列( 逗号,前边的表示行数索引-- 逗号,后边的表示列索引) arr2[ : , 2:4] 访问 所有行数(行数不加限制),第三列到第四列(不包含第五列--所有这样的都是包前不包后) arr2[1:3] 访问第二行到第三行,列数不加限制 arr2[1: , 2:] 访问第二行到所有,第三列到所有2、逻辑索引
①arr2>=30 ,判断每个元素与30相比较,返回True or false arr2[arr2>30] ---返回数组arr2中所有大于30的元素,存放于新的一维数组中 -----注:返回值为新的 一维数组 ②~(arr2>=30) 取每个元素与30相比较判断结果的相反情况 arr2(~(arr2>=30)) ---取数组arr2中比30小的所有元素组成新数组 ③并列条件 ( arr2>3.5 )& ( arr2<10 ) ---在每个元素位置上返回判断结果 true or false arr2( ( arr2>3.5 )& ( arr2<10 ) ) 将两个条件都满的值取出来组成新数组 注意: 按条件取满足条件的远近苏组成新数组时,数组名称前后不可变, arr1[arr1>1] --------正确 arr2[arr1>1]------错误,报错 name 'arr2' is not defined