numpy: 1. numpy的属性: 1.T : 转置 li1 = [ [1,2,3], [4,5,6] ] a = np.array(li1) a.T 执行结果: array([[1, 4], [2, 5], [3, 6]]) 就相当于是将行变成列,列变成行,它也是一个比较常用的方法 2.dtype: 数据类型 布尔型 bool_ 整型 int_ int8 int16 int32 int 64 无符号整型 uint8 uint16 uint32 uint64 浮点型 float_ float16 float32 float64 复数型 complex_ complex64 complex128 注:astype()方法可以修改数组的数据类型 3.size: 个数 a = np.array([3,8,7,4]) a.size 执行结果: 4 4.ndim: 维度 返回的整数 a = np.array([3,8,7,4]) a.ndim 执行结果 1 b = a.reshape(2,2) b 执行结果 array([[3, 8], [7, 4]]) b.ndim 执行结果 2 5.shape:维度 返回的元组 b = a.reshape(2,2) b.shape 执行结果 (2, 2) 2. 创建ndarray的方式: 1、arange(): 注: 数组对象内的元素类型必须相同 数组大小不可修改 np.arange(1.2,10,0.4) 执行结果: array([1.2, 1.6, 2. , 2.4, 2.8, 3.2, 3.6, 4. , 4.4, 4.8, 5.2, 5.6, 6. , 6.4, 6.8, 7.2, 7.6, 8. , 8.4, 8.8, 9.2, 9.6]) ----------------------------------------------------------------- 2、linspace() np.linspace(1,10,20) 执行结果: array([ 1. , 1.47368421, 1.94736842, 2.42105263, 2.89473684, 3.36842105, 3.84210526, 4.31578947, 4.78947368, 5.26315789, 5.73684211, 6.21052632, 6.68421053, 7.15789474, 7.63157895, 8.10526316, 8.57894737, 9.05263158, 9.52631579, 10. ]) # arange是顾头不顾尾, # 而这个方法是顾头又顾尾,每个数字之间的距离相等的,前后两个数做减法肯定相等 ---------------------------------------------------------------- 3、zeros() np.zeros((3,4)) 执行结果: array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]) # 会用0生成三行四列的一个多维数组 --------------------------------------------------------------------- 4、ones() np.ones((3,4)) 执行结果: array([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) # 会用1生成三行四列的一个多维数组 ------------------------------------------------------------------------ 5、empty() np.empty(10) 执行结果: array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) # 这个方法只申请内存,不给它赋值 ----------------------------------------------------------------------- 6、eye() np.eye(5) 执行结果: array([[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.], [0., 0., 1., 0., 0.], [0., 0., 0., 1., 0.], [0., 0., 0., 0., 1.]]) 3.索引与切片 0. reshape 改变数组的维度与形状 res = np.array([3,9,3,3,3,3,3,3,3,3,3,5,399999,9,33]) res.reshape(5,3) array([[ 3, 9, 3], [ 3, 3, 3], [ 3, 3, 3], [ 3, 3, 5], [399999, 9, 33]]) 1. 一维数组的索引和切片 跟 python的列表和切片一样 高维数组的索引和切片,(行索引/切片,列索引/切片) array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29]]) arr[1:4,1:4] # 切片方式 执行结果: array([[ 7, 8, 9], [13, 14, 15], [19, 20, 21]]) 2. 布尔型索引 ******** li = [random.randint(1,10) for _ in range(30)] a = np.array(li) a[a>5] 执行结果: array([10, 7, 7, 9, 7, 9, 10, 9, 6, 8, 7, 6]) 3. 花式索引 [[索引的下标]] ********* x = numpy.array([1,2,3,4,5,6]) print x[[0,1,2]] # [1 2 3] print x[[-1,-2,-3]] # [6,5,4] x = numpy.array([[1,2],[3,4],[5,6]]) print x[[0,1]] # [[1,2],[3,4]] print x[[0,1],[0,1]] # [1,4] 打印x[0][0]和x[1][1] print x[[0,1]][:,[0,1]] # 打印01行的01列 [[1,2],[3,4]] # 使用numpy.ix_()函数增强可读性 print x[numpy.ix_([0,1],[0,1])] #同上 打印01行的01列 [[1,2],[3,4]] x[[0,1],[0,1]] = [0,0] print x # [[0,2],[3,0],[5,6]] 注: 1.花式索引生成一个新的数组,不像切片,花式索引生成的是新的数据对象 2.由于花式索引不同于切片,实现的是拷贝功能,生成的新数组改变不会影响元数据 4. 通用函数 一元函数: abs、fabs 分别是计算整数和浮点数的绝对值 sqrt 计算各元素的平方根 square 计算各元素的平方 exp 计算各元素的指数e**x log 计算自然对数 sign 计算各元素的正负号 ceil 计算各元素的ceiling值 floor 计算各元素floor值,即小于等于该值的最大整数 rint 计算各元素的值四舍五入到最接近的整数,保留dtype modf 将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似 isnan 计算各元素的正负号 isinf 表示那些元素是无穷的布尔型数组 cos,sin,tan 普通型和双曲型三角函数 二元函数: add 将数组中对应的元素相加 subtract 从第一个数组中减去第二个数组中的元素 multiply 数组元素相乘 divide、floor_divide 除法或向下圆整除法(舍弃余数) power 对第一个数组中的元素A,根据第二个数组中的相应元素B计算A**B maximum,fmax 计算最大值,fmax忽略NAN miximum,fmix 计算最小值,fmin忽略NAN mod 元素的求模计算(除法的余数) 5. 数学计算函数 sum 求和 cumsum 求前缀和 mean 求平均数 std 求标准差 var 求方差 min 求最小值 max 求最大值 argmin 求最小值索引 argmax 求最大值索引 6. 随机数 rand 给定形状产生随机数组(0到1之间的数) randint 给定形状产生随机整数 chocie 给定形状产生随机选择 shuffle 与random.shuffle相同 uniform 给定形状产生随机数组
相关案例:
np.add(arr,arr1) > array([5, 5, 9, 9, 6]) ------------------------------------------------------------------------- # subtract 从第一个数组中减去第二个数组中的元素 np.subtract(arr,arr1) > array([-5, -3, 7, -5, 6]) ------------------------------------------------------------------------- # multiply 数组元素相乘 np.multiply(arr,arr1) > array([ 0, 4, 8, 14, 0]) np.random.rand(2,2,2) > array([[[0.37992696, 0.18115096], [0.78854551, 0.05684808]], [[0.69699724, 0.7786954 ], [0.77740756, 0.25942256]]]) ------------------------------------------------------------------------- # randn 返回给定维度的随机数组 np.random.randn(2,4) > array([[ 0.76676877, 0.21752554, 2.08444169, 1.51347609], [-2.10082473, 1.00607292, -1.03711487, -1.80526763]]) ------------------------------------------------------------------------- # randint 返回给定区间的随机整数 np.random.randint(0,20) > 15 ------------------------------------------------------------------------- # chocie 给定的一维数组中随机选择 np.random.choice(9,3) # # 从np.range(9)中,(默认)有放回地等概率选择三个数 > array([5, 8, 2]) np.random.choice(9,3,replace=False) # 无放回地选择 > array([1, 2, 0]) ------------------------------------------------------------------------ # shuffle 原列表上将元素打乱(与random.shuffle相同) arr = np.arange(10) np.random.shuffle(arr) arr > array([4, 5, 0, 3, 7, 8, 9, 1, 2, 6]) ------------------------------------------------------------------------ # uniform 给定形状产生随机数组 np.random.uniform(0,1,[3,3,3]) > array([[[0.80239474, 0.37170323, 0.5134832 ], [0.42046889, 0.40245839, 0.0812019 ], [0.8788738 , 0.48545176, 0.73723353]], [[0.79057724, 0.80644632, 0.65966656], [0.43833643, 0.53994887, 0.46762885], [0.44472436, 0.08944074, 0.34148912]], [[0.7042795 , 0.58397044, 0.13061102], [0.22925123, 0.97745023, 0.14823085], [0.6960559 , 0.07936633, 0.91221842]]]) ------------------------------------------------------------------------ # seed 设定随机种子(使相同参数生成的随机数相同) np.random.seed(0) # 当seed(0)时生成以下随机数组 np.random.rand(5) > array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ]) np.random.seed(2) # send(5)时生成以下随机数组 np.random.rand(5) > array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ]) np.random.seed(0) # 再次使用send(0)会发现返回最开始的随机数组 np.random.rand(5) > array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ]) ------------------------------------------------------------------------ # standard_normal 生成正态分布的随机样本数 np.random.standard_normal([2,10]) > array([[-0.17937969, -0.69277058, 1.13782687, -0.16915725, -0.76391367, -0.4980731 , -0.36289111, 0.26396031, -0.62964191, -0.4722584 ], [-1.51336104, 1.10762468, 0.17623875, -0.94035354, 0.92959433, -1.06279492, -0.88640627, 1.92134696, -0.45978052, -1.08903444]]) np.random和Python原生的random的区别: 比较内容 random np.random 输入类型 非空的列表类型(包括列表、字符串和元组) 非空的列表类型(包括列表、字符串和元组)+ numpy.array类型 输出维度 一个数或一个list(多个数) 可指定复杂的size 指定(a,b)范围 可以 整数可指定,浮点数不行,需自行转换 批量输出 不可 可。通过指定size参数 特定分布 涵盖了常用的几个分布; 只能单个输出 几乎涵盖了所有分布;可批量输出
补充点: 浮点数特殊值: 1.nan(Not a Number):不等于任何浮点数(nan != nan) 应用场景:用来标识缺失值 2.inf(infinity):比任何浮点数都大