数据分析03 numpy数据类型和索引切片

数据分析03 numpy数据类型和索引切片
numpy数据类型img布尔类型(bool)import numpy as nparr np.array([1,0,1,0],dtype“bool”)arr np.array([1,0,1,0,2],dtypenp.bool)print(arr)上面2种写法都是对的都是转换为bool类型的输出为[ True False True False True]非0的就是true,0就是false整数类型(int,unit)arr np.array([1,2,3],dtypenp.int8)2的8次方的范围不能表达128print(arr)因此的话我们一般写int就行了他会自动的帮我设置最优范围的浮点数(float)复数(complex)索引和切片img帮我查数据怎么数据切片基本取值一维数组的索引和切片arr np.random.randint(1,20,10)print(arr)[13 17 9 6 14 15 19 13 8 17]基础索引获取单个数据print(arr[0])13二维数组arr np.random.randint(1,30,size(2,5))print(arr)行和列 都有索引前面表示行的索引后面表示列的索引print(arr[1,2])行和列取值获取全部的数据一维数组只有一行 : 处理行和列的print(arr[:])[13 17 9 6 14 15 19 13 8 17]生成一个2行5列形状的二维数组arr np.random.randint(1,30,size(2,5))取出所有的行和列print(arr[:,:])取出第二行的全部数据print(arr[1:,:])取出第二行索引为2:4的数据print(arr[1:,2:4])前面表示行后面表示列列还可以指定范围进行取值这个样的就比较的多了输出为[[12 27 28 24 11][20 11 2 11 15]][[20 11 2 11 15]][[ 2 11]]指定范围取值这个跟slice(start,end,step) 一样的操作但是显然了这个:还是好用获取指定范围的数据print(arr[1:3]) # [1:3) 右边不包含[17 9]布尔取值支持逻辑运算符的 | print(arr[arr10])print(arr[(arr10) (arr16)])输出为[16 13 15 12 15 12][13 15 12 15 12]arr np.random.randint(1,30,size(2,5))print(arr[arr10])输出结果是一个一维的数据[16 13 21 20 11 21 17]筛选出第一行中大于10的数据print(arr[1][arr[1]10])[11 28 28 18]获取列的数据获取第二列的数据print(arr[:,2])[20 5]numpy运算一维数组运算a np.array([1,2,3])b np.array([4,5,6])print(ab)print(a-b)print(a*b)print(a/b)[5 7 9][-3 -3 -3][ 4 10 18][0.25 0.4 0.5 ]这个是拼接的列表原生的python不支持运算的需要使用循环才能实现比较的麻烦l1 [1,2,3]l2 [4,5,6]print(l1l2)[1, 2, 3, 4, 5, 6]二维数组运算a np.array([[1,2,3],[4,5,6],[7,8,9]])b np.array([[1,2,3],[4,5,6],[7,8,9]])依次相加print(ab)[[ 2 4 6][ 8 10 12][14 16 18]]print(a-b)[[0 0 0][0 0 0][0 0 0]]数组和标量(数字)进行运算a np.array([1,2,3])里面的每个元素的数据都会增加3print(a3)[4 5 6]广播机制不规则的矩阵相加广播的条件第一种行和列相同第二种行为1和列为1arr[1,2] 1行2列arr[1,2,3] 1行3列这个数据就不能广播虽然行相同但是列不相同也没有1就不能实现广播广播机制同一维度相同可以或者是有一个为1就可以广播行为1但是列不为1或者不相同就不能广播1行3列数组a np.array([1,2,3])3行1列的数组b np.array([[1],[2],[3]])print(ab)“”a1 2 3b123广播后a1 2 31 2 31 2 3