python数据分析及可视化(四)Numpy的随机数、拼接、分割、广播、通用函数、深浅拷贝、掩码、花哨索引、图像处理

Numpy函数应用

了解数组对象可以调用哪些方法。

随机数

  1. np.random.random(),括号内不传参数,产生为[0,1)内的随机数;传入的参数为形状的时候,产生形状的随机数组。
  2. np.random.randint(),括号内传入的参数为(起始值,终止值,size=(形状))
  3. np.random.randn(),括号内传入的为形状,产生均值为0,方差为1的正态分布的随机数组
  4. np.random.normal(),括号内传入的参数为(均值,方差,size=(形状))
  5. np.random.rand(),括号内传入的为形状,生成[0,1)内随机数的数组
    在这里插入图片描述
    np.random.randn()
    np.random.normal()
    np.random.rand()
    用随机数生成的数据一直在变化,可以利用seed()来固定生成的数据,括号里不传内容,数据还是随机改变,传入数字,每个数组代表生成一组固定的数据。
    所有的随机数,其实是伪随机的,是通过种子计算出来的,可以用特定的种子固定一组随机数,也可以跟时间绑定,每过一秒就产生一组随机数,也可以跟时间戳进行绑定。时间不同,生成的数组也是随机的。
    在这里插入图片描述
    所有的随机数,其实是伪随机的,是通过种子计算出来的,可以用特定的种子固定一组随机数。种子的范围在0—2**32-1 范围之间。

对数组进行随机排序,行的顺序发生变化,不会对原数组产生变化
在这里插入图片描述
随机数组,是从已知列表中选取数据,可以重复选取
在这里插入图片描述
也可以在已知数据中随机选取数字,或者在指定数字范围内随机取数。

数据拼接

上下拼接

上下拼接时,用vstack(),括号内是要拼接的数组的集合,跟数组所在的前后顺序有关,放在前面的数组,拼接时在新数组的上方。多维数组可以跟一维数组进行拼接,要保证列数必须相同,拼接后是完整的矩形。
在这里插入图片描述

左右拼接

左右拼接用hstack(),同样跟数组所在的前后顺序有关。
在这里插入图片描述

数组转置与换轴

● arr.transpose() # 转置,方法
● arr.T # 转置,属性
● arr.swapaxes() # 换轴,只限定于二维数组
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

取对角线

在这里插入图片描述
在这里插入图片描述

合并

np.concatenate(),里面的axis参数不传,默认为0,为行合并;为1时为列合并
在这里插入图片描述

数组分割

可以分为左右分割,上下分割,要注意分割的时候要能均分,不要4列数组分割成3列。
在这里插入图片描述
在这里插入图片描述

数组广播

广播机制规则:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。
数组可以跟常数、数组进行运算。
数组跟常数进行加减乘除运算时,可以视为把常数向右、向下广播为数组的形状,对应数据进行运算。
在这里插入图片描述
数组与数组进行加减乘除运算,对应位置数据进行运算。当运算数组不一致时,会在缺少的方向上进行广播,3行8列的数组与1行8列的数组进行运算的时候,1行8列的数组会在行的方向上进行广播成3行,两个数组形状相同时,对应数据进行运算。同样列方向上也能进行广播.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1行8列的数组和8行1列的数组进行运算,各自进行行广播和列广播,直至两个数组形状相同时,再进行运算,得到8行8列的数组。
在这里插入图片描述
三维数组的运算,运算时按照广播机制规则,从末尾的维度进行判断,出现相同的数据或者为1的,才可以进行计算。
在这里插入图片描述
在这里插入图片描述

通用函数

一元函数

只需要传一个参数。

函数描述
np.abs绝对值
np.sqrt开根
np.square平方
np.exp计算指数(e^x)
np.log,np.log10,np.log2,np.log1p求以e为底,以10为底,以2为底,以(1+x)为底的对数
np.ceil向上取整,比如5.1会变成6,-6.9会变成-6
np.floor向下取整,比如5.9会变成5,-6.1会变成-7
np.rint,np.round四舍六入五成偶
np.modf将整数和小数分隔开来形成两个数组
np.isnan()判断是否是nan,缺失值,括号内传数组
np.isinf()判断是否是inf,无穷大,括号内传数组
np.cos,np.cosh,np.sin,np.sinh,np.tan,np.tanh三角函数

在这里插入图片描述

INF和NAN

inf代表是无穷数,-inf代表负无穷,默认是浮点型,没有意义,任何数跟inf运算,得到的都为inf,在计算时会想办法清理掉,两个inf相等。
nan为缺失值,没有数据是空的,默认浮点型,任何数跟nan运算,得到的都为nan,两个nan不相等。
在这里插入图片描述
在这里插入图片描述

二元函数

需要传2个参数

函数描述
np.add加法运算(即1+1=2),相当于+
np.subtract减法运算(即3-2=1),相当于-
np.negative负数运算(即-2),相当于加个负号
np.multiply乘法运算(即2x3=6),相当于x
np.divide除法运算(即3/2=1.5),相当于/
np.floor_divide取整运算,相当于//
np.mod取余运算,相当于%
greater,greater_equal,less,less_equal,equal,not_equal>,>=,<,<=,=,!=的函数表达式
logical_and&的函数表达式
logical_or\

在这里插入图片描述

聚合函数

方法描述
sum沿着轴向计算所有元素的累和,0长度的数组,累和为0
mean数学平均,0长度的数组平均值为NaN
max,min最大值和最小值
argmax,argmin最大值和最小值的位置
std,var标准差和方差
ptp极值
cumsum从0开始元素累积和
median中值

在这里插入图片描述

布尔数组函数

在这里插入图片描述

排序函数

在这里插入图片描述
在这里插入图片描述

添加删除函数

操作后对原数组没有改变。这里使用了append、delete、insert函数。
在这里插入图片描述
在这里插入图片描述

不可变数据对象

不可变数据类型:整型,浮点型,布尔型,字符串、元组。不可变类型修改变量的值,进行重新赋值的时候,不能在内存地址上去修改,会重新开辟内存地址,创建一个新的数据对象。
比如定义两个变量并进行赋值(赋值其实为对象的引用),a = 999,b = a,这个时候输出a,b,均为999。a=999,意味着在内存地址中开辟了一块内存空间存放数据999,这是一块地址,以后为了使用这块地址上的数据999,就起了一个名称a,如果用到这个数据的话,就通过变量名a找到这块内存地址上的数据,变量名指向的是内存地址。b = a,可以用id(a),id(b)去查看,两个变量所指向同一块内存地址,所以内存地址是一样的。好比兄弟二人的家
如果,a = 999,b = 999,通过id()去查看,发现两个变量的内存地址是不一样的,只不过是数据是一样的。相当于两个变量分别开辟了内存地址。好比两家的装修风格一样,但地址不一样。

可变数据对象

可变数据类型:列表,字典,集合。修改变量的值是在原有的内存地址上修改的.
在这里插入图片描述

python数据对象的深浅拷贝

浅拷贝

只拷贝第一层的数据作为副本,从下图可以看到,拷贝后 两个列表的数据一样,但内存地址不一样,而两个列表中嵌套的列表,内容和内存地址都一样。
在这里插入图片描述
内层列表更改时,两个列表都进行了更改,说明只拷贝了内层列表的内存列表的地址,两个列表是独立的对象,但是它们的子对象指向同一个对象。

深拷贝

完全拷贝,所有层次的数据,完完全全复制数据对象,两个列表是完全独立的个体。拷贝了内层列表的数据内容,而非内存地址了。
在这里插入图片描述

Numpy数组对象的深浅拷贝

  • 浅拷贝:内存地址
  • 深拷贝:数据内容
    在这里插入图片描述

数组对象的掩码操作

掩码即为掩盖真实的操作,取值的时候传递进来的不再是索引,而是布尔数据对象。
在这里插入图片描述
datas[fruits == ‘pear’] 就为布尔索引,相当于把 fruits == ‘pear’ 的结果对应到 datas的每一行,为True的保留。

花哨索引

[,]作为索引时,实际上是[行,列],逗号前是对行的操作,后为对列的操作。
在这里插入图片描述
在这里插入图片描述

数组运算和矩阵运算

数组运算是数组中各元素进行运算;矩阵与单位矩阵相乘,得到的是矩阵本身。
在这里插入图片描述
在这里插入图片描述

Numpy的应用—图像处理

对图像的操作其实是对数据的操作,在代码文件夹下放入图片 demo.jpg。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

练习题

  1. reshape(),resize(),flatten(),shape()中不能修改数组对象维度的是:(shape())。
    shape()是属性,并不是方法,用来查看数组形状的。 reshape(),resize()直接更改数组形状,flatten()是多维转换为一维。
  2. np.random.seed(100),Z=np.random.uniform(0,1,10)找到数组中离0.5最近的值
    在这里插入图片描述
  3. a = np.random.randint(1,10,[5,3]),按照行求最大值和最小值相除的结果。
    在这里插入图片描述
  4. a = np.arange(15).reshape(3,5),将二维数组的行和列分别进行逆序。
    在这里插入图片描述
  5. a = np.zeros((2,2),设置一个数组不能修改值()
    答案:a.setflags(write=False) 或者 a.flags.writeable = False
    在这里插入图片描述
  6. a = np.arange(12).reshape(3,4),创建两个结构相同的数据,元素分布为0和1
    在这里插入图片描述
  7. a = np.arange(12,dtype=float).reshape(3,4),把里面的元素都改为字符串.
    答案:字符串:a.astype(‘str’),改为整型:a.astype(‘int’)
    在这里插入图片描述
  8. 求解方程 x-2y+z = 0;2y-8z = 8;-4x+5y+9z = -9
    在这里插入图片描述
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值