Intro
代码更简洁: numpy直接以数组、矩阵为粒度计算并且支持大量的数学函数,而python需要用for循环从底层实现;
性能更高效: numpy的数组存储效率和输入输出计算性能,比python使用list好很多,用numpy进行计算要比原生Python快得多,而且数据量越大,效果越明显;numpy的大部分代码都是c语言实现的,这是numpy比python高效的原因
numpy核心:ndarray对象
ndarray对象
numpy的核心数据结构,叫做array就是数组,
array对象可以是一维数组,也可以是多维数组python的list也可以实现相同的功能,但是array的优势在于性能好,包含数组元数据信息、大量的便捷函数
成为 Scipy、Pandas、scilit-learn、tensorflow、paddlepaddle等框架的通用底层语言
numpy的array和python的list的一个区别是它的元素必须都是同一种数据类型,这也是numpy高性能的一个原因
ndarray属性
个人以前会弄混shape和size,注意shape打印的是数组的形状是一个元组,size则是表示数组大小即总共有多少个元素
shape 返回一个元组 表示array的形状
ndim 返回一个数字 表示array的维度的数目
size 返回一个数字 表示array中所有数据元素的数目
dtype array中元素的数据类型,可以把a数组元素转为str类型
itemsize 表示数组中每个元素的字节大小
创建array的方法
从Python的列表list和嵌套列表创建array,
使用函数arange、linspace等创建等差数组,左闭右开,默认左右取闭,num是要删除的等间隔样例数量(默认50),endpoint 序列中是否包含stop值,默认为true
使用ones、ones_like、zeros、zeros_like、empty、empty_like、full、full_like、eye等函数创建,注意使用empty创建的数据是未初始化的,里面的值可能是随机值不要用,full则是将一个给定大小的数组填满固定值,用法如
生成随机数的np.random模块创建,设置随机种子,使得每次随机的结果固定,随机生成 2行5列的2维数组,返回数据在[0,1之间; 在[2,5 范围内生成5个随机整数; 在 [2,5 之间 生成均匀分布的10个数字; 在 [2,5 之间 生成均匀分布的(2,5个数字; 则返回有标准正态分布的数据,均值1方差0; 则可指定均值和标准差;另外,从给定的数组里 生成随机结果,把一个数组进行随机排列(如果数组是多维的 则只会在第一维度打散数据),把一个数组进行随机排列,或者数字的全排列,两者功能相同但permutation不会更改原来的arr 会返回一个新的copy
numpy的数组索引
基础索引,切片法,不详细叙述
神奇索引,就是用整数数组进行的索引,比如对于x = np.arange(10,可以用来取x对应位置的值;对于二维数组,筛选第0和第2列,同时指定行列
布尔索引,对于x = np.arange(10,可以用x>5返回bool值的数组,通过条件进行赋值,把x中大于5的值全部赋为1,小于5的值全部加20,还可以进行条件组合,比如 和;注意对于二维数组Y = np.arange(20.reshape(4, 5 来说,既有行又有列 因此返回的是 行列一维数组 返回的是行列一维数组,可以用 把第3列大于5的行数据筛选出来
numpy数据操作
数组数学操作
A*B是对应位置元素相乘,对于arr = np.arange(12.reshape(3,4,可以用各种数学统计函数,包括sum,prod(元素乘积),cumsum(从头到尾累加,每加一次输出一个元素),cumprod(累积),min,max,median,mean,和求取数列第?分位的数值(后者范围为0-1),std(标准差)
对于numpy的聚合类函数的axis参数解释:axis=0代表行 axis=1 代表列,axis=0 代表把行消解掉,axis=1 代表把列消解掉;axis=0 代表跨行计算,axis=1 代表跨列计算
数组合并操作
对于a = np.arange(9.reshape(3,3以及b = np.arange(9,18.reshape(3,3,合并行(行变多)使用或或,合并列(列变多)使用或或。
参考
https://gengzhige-essay.readthedocs.io/docs/01 环境配置/1-5 Numpy教程.html
科学计算库Numpy - mathor