【joyful pandas 01】基础知识02

numpy基础知识

Numpy是Numerical Python 的简称,一下内容是numpy的主体:

  • ndarray,一种高效的多维数组,提供灵活的广播操作(后面会提及)
  • 对所有数据进行快速而灵活的矩阵计算
  • pandas的基础
  • 其他的巴拉巴拉没什么意思,在巴拉巴拉就要小魔仙变身了

构造np数组

最最最基本的方式就是

import numpy as np
np.array([1,2,3])
array([1, 2, 3])

很多np生成数组的方式我也是知道的,当然也有部分不清楚,就在这块做个总结:

np.linspace(1,5,11) # 起始、终止(包含)、样本个数
np.arange(1,5,2) # 起始、终止(不包含)、步长
np.zeros((2,3)) # 传入元组表示各维度大小
np.eye(3) # 3*3的单位矩阵
np.eye(3, k=1) # 偏移主对角线1个单位的伪单位矩阵
np.full((2,3), 10) # 元组传入大小,10表示填充数值
np.full((2,3), [1,2,3]) # 通过传入列表填充每列的值

构造随机数组

numpy中用于生成随机数的函数有rand,randn,randint,choice,其功能的如下

np.random.rand(3)  # 生成服从0~1均匀分布的三个随机数
np.random.randn(3)  #生成3个服从标准正态分布的随机数
np.random.randint(1,10,1)  #指定生成随机整数的最小值最大值和不长

choice 可以从给定的列表中以一定的概率的方式抽取结果,在不设置概率的时候默认为均匀分布,默认为有放回抽样

my_list = ['a', 'b', 'c', 'd']
np.random.choice(my_list, 2, replace=False, p=[0.1, 0.7, 0.1 ,0.1])

输出内容

array(['b', 'a'], dtype='<U1')

提到在使用返回相同数量的元素时,相当于使用了permutation函数,即只是单纯将数据打乱了,在后面的机器学习中十分有用。

np.random.permutation(my_list)
array(['b', 'd', 'a', 'c'], dtype='<U1')

最后还要画一个重点,那就是随机数种子,通过随机数种子可以固定产生一个随机数。

好处实在是太多了,在后面的数据分析、统计的过程中,固定随机数对检验十分重要:

np.random.seed(0)
np.random.rand()   # 此时生成的随机数是固定的

数组的变形与合并

转置 .T

二维数组合并

其中r_表示按照行进行合并,c_ 表示按列进行合并

np.r_[np.zeros((2,3)),np.zeros((2,3))]  #注意zeros里面接的是元组

输出结果

array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
np.c_[np.zeros((2,3)),np.zeros((2,3))]  #注意zeros里面接的是元组

输出结果

array([[0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]])

维度变换

reshape可以帮助用户把原数组按照新的维度进行排列,使用时有C模式和F模式,分别表示逐行和逐列的方式进行读取。

target = np.arange(8).reshape(2,4)
target

可以看一下这两种填充方式的区别……,

算了还是不看了,应该不会考……

reshape同时是允许有维度空缺的,用-1进行填充

target.reshape((4,-1))
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7]])

np的切片与索引

mark一下时间点,现在是12.15日下午1点半。为了完成这部分的学习,我实际上花了很长的时间,但是和datawhale中分享的优秀范文相比,也是发现自己仿佛在抄课本。想要改进一下自己的记笔记的风格,想想好吧,我是真的小白,很多东西我是真不知道……

阳明说,人生有三大蠢事不要做:

  • 不懂装懂
  • 其他几个不记得了-

array类型支持使用slice类型进行切边,以start: end: step的形式切片,另一方面可以使用np.ix_ 在对应的维度上使用布尔索引

常用函数

numpy实际上是python学习中比较重要且基础的内容。这里出现了函数有where\nonzero/argmax/argmin/any/all/comprod/cumsum/diff/以及各类统计函数 实际上这些方法中的大部分我都曾经接触过或者使用过,每次用的时候都是懵逼他妈给懵逼开门,懵逼到家了。实际上很多内容应该早就要进行总结,不会总结的人是不会学习的人,你说呢?

1.where 函数,是一种条件函数,可以用于指定满足条件和不满足条件位置的对应填充之“

a = np.array([-1,1,-1,0])
np.where(a>0, a, 5) # 对应位置为True时填充a对应元素,否则填充5

输出结果

array([5, 1, 5, 5])

2.nonzero用于返回非零数的索引,而argmax/argmin分别用于返回最大值和最小值的位置索引

any 当序列中至少存在一个True或者非零元素时返回True,否则返回False

all指当序列元素 全为 True或非零元素时返回True,否则返回False

4.cumprod是累乘函数,cumsum是累加函数, 返回同样长度的数组,如下

a = np.array([1,2,3])
a.cumprod()
array([1, 2, 6], dtype=int32)

5.统计函数,其中包括max, min, mean, median, std, var, sum, quantile,其中分位数计算是全局方法,因此不能通过array.quantile的方法调用:

6.对于协方差和相关系数分别可以利用cov, corrcoef

7.最后一个,可以使用numpy按照行或者列进行统计,设置参数axis=0时,(也是默认的)为列的统计结果,axis=1时为行的统计结果。

广播机制

广播机制是用于处理两个不同维度数组的操作

  • 在一个多维数组和标量运算时,将标量扩充到和多维数组一个维度进行计算
  • 在二维数组的运算中,在维度完全一致时,可以直接运算。
    • m ∗ 1 m*1 m1或者 1 ∗ n 1*n 1n的时候,则会自动将 1 1 1维数组扩充到与另一个维度相适应
    • 如果不是以上的情况就无法运算

向量与矩阵的计算

好久没碰线代,好多内容都忘了,这也反映前段时间学的东西只是为了期末考试,啥都没学到,考前刷两套卷子。还是得为自己学习。

向量的内积dot

a ⋅ b = ∑ i a i b i \rm \mathbf{a}\cdot\mathbf{b} = \sum_ia_ib_i ab=iaibi

a = np.array([1,2,3])
b = np.array([1,3,5])
a.dot(b)

22

向量的范数这块内容,等我去补一下线代的知识再回过头来写这个。

矩阵乘法:@

[ A m × p B p × n ] i j = ∑ k = 1 p A i k B k j \rm [\mathbf{A}_{m\times p}\mathbf{B}_{p\times n}]_{ij} = \sum_{k=1}^p\mathbf{A}_{ik}\mathbf{B}_{kj} [Am×pBp×n]ij=k=1pAikBkj

a = np.arange(4).reshape(-1,2)
b = np.arange(-4,0).reshape(-1,2)
a@b
array([[ -2,  -1],
       [-14,  -9]])
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值