莫烦:Numpy--基本操作

pip

如果你是 Python3.+ 的版本,用下面这种方式:

pip3 install numpy

Numpy和List区别

numpy储存数据的格式:np.array([1,2,3])

list的格式:[1,2,3]

甚至对内部的一个值进行修改也是同样的逻辑.

numpy的优势

Numpy的核心优势:运算快。用专业的语言描述的话,Numpy 喜欢用电脑内存中连续的一块物理地址存储数据,因为都是连号的嘛,找到前后的号,不用跑很远, 非常迅速。而 PythonList 并不是连续存储的,它的数据是分散在不同的物理空间,在批量计算的时候,连号的肯定比不连号的算起来更快。因为找他们的时间更少了。

而且 Numpy Array 存储的数据格式也有限制,尽量都是同一种数据格式,这样也有利于批量的数据计算。 所以只要是处理大规模数据的批量计算,Numpy 肯定会比 Python 的原生 List 要快。

维度很重要

创建数据

一维数据:可以代表一个车辆百公里加速的列表

二维数据:可以代表多个车辆百公里加速的列表

既然能创建二维数据,当然更高维度也不在话下啦,比如三维,可以表示,我在不同场地,多次测试不同测量,比二维数据多出来的一个维度就是不同场地这个维度了。


np.array():创建数据
array.ndim:现实数据的维度


添加数据

原本的维数不会发生改变。

原本的一维变成2维。

加维度的方法

np.expand_dims(test1,0)

test2[np.newaxis,:]

合并数据
np.concatenate[kɑnˈkæt(ə)ˌneɪt]([])将两个数据合并

 有同学肯定会问了,你既然能在第一个维度上叠加,那你能不能在第二个维度上叠加呢?当然可以,只需要巧妙给 np.concatenate 一个参数就好。

 

 只要维度能够对齐,你可以在任意维度上进行合并操作。注意,有些数据维度是对不齐的,这样没办法合并。比如:

 还有两个比较好用的在二维数据上可以方便调用的功能,分别是 np.vstack()np.hstack().


观察形态


array.size:总的数据个数

 

 更进一步,我不光想知道总数据,我还想知道当前有多少次测试(第一个维度,行),和在多少辆车上测试了(第二个维度,列)。怎么办?

array.shape:看每个维度下的数据数量

数据选择不迷茫

单个选取

 当然还有种方法,可以一次性选择多个,但实际上选择的逻辑还是一个个拎出来的逻辑。就像一个个从抽屉里拿出来的意思。

二维或者多维数据也可以用上面的方法来选择数据,一个个拎出来。

 

 切片划分

上面太累了太难记了

单维数据

 多维数据

 条件筛选(np.where())

就是按照一定的筛选逻辑进行过滤,留下那些在数值上符合条件的数据。

底层的筛选逻辑是:既然 condition 是一种 True/False, 那么只要我们得到一个 True/False 数据,我都能做筛选。

 除了这种直接用[]的形式,在 Numpy 中,还有一个专用的函数来做数据赛选。这种筛选更强大,它还能做筛选结果的替换工作。 它可已将满足条件的位置变成你设定的数字。下面满足条件的,都改成 -1,不满足的,都还是 a 里面的数字。

或者,不仅是满足条件的 condition,不满足条件的,也能变成你期望的数字。

 

还能让它和另外一个数据做条件上的整合

 

 基础运算

 加减乘除

列表需要循环

或者需要一个函数即可

 但是numpy

 Numpy 是可以批量进行计算的,只需要简单的 +-*/,就能进行全元素的运算,也就是向量化运算。

 np.dot()

在科学运算,机器学习中。矩阵运算毋庸置疑十分重要, 我们在之后的小练习中也会着重体验到重要性。 下面我来介绍在机器学习中最常用的矩阵点积运算。

 有两种写法。1)直接用一个矩阵 dot 另一个;2)用 np.dot(a, b) 把两个矩阵包起来。

当然,矩阵还有很多其他的计算,比如 np.outer() 矩阵外积,np.inner() 矩阵内积 (和 np.dot() 的用法稍稍有些不同,你可以理解成 np.dot(a, b)= np.inner(a, b.T), 把 b 做一次转置)(?)存在疑问,这个outer

 

内积和外积,从某种意义上来说对我它两没啥区别,在计算矩阵相乘的时候,都可以按照内积计算得到新的矩阵。但是上面的outer不知为啥和dot计算出来的不一样。

数据统计分析

什么是数据分析呢?其实也就是在数据中找到你想要的一些变量,总结数据的规律。最简单的当属找到最大值最小值了。 比如上面的身高数据,你想找全班最高和最矮的。

 这里也有两种方法可以获取到最大最小,只是不同的写法罢了,你习惯用哪个就用哪个好了。

  1. np.max(a), np.min(a)
  2. a.max(), a.min()

累加:print(a.sum())

累乘:a.prod()

计数(总数): a.size

 np.count_nonzero():计算非零总数,没有计算零的总数,我试了np.count_zero()报错

在统计学中,我们常会有两个概念,均值,中位数。算算你公司的平均工资是多少?不算不知道,一算吓一跳, 我们公司,因为有一个工资很高的人,平均工资是 4.82w,哈哈哈,我也被平均了。 但是这时候,为了更准确看到普通民众的薪资水平,最好还是用中位数(1.2w)更可靠。

在统计数据分布的时候,还有一个值也比较重要,standard deviation 标准差,用来描述正态分布。 这个在机器学习中,特别是深度神经网络中也非常重要,特别用于权重的生成原则。

 

特殊运算符号

有的时候,其实你不关心 np.max() 或者 np.min() 的数值是多少,而是关心这个数值的序号, 比如还是那个身高的例子,我找到了最高身高,其实我是想对应上人的。用 np.argmax() 和 np.argmin() 就能搞定。有的时候,其实你不关心 np.max() 或者 np.min() 的数值是多少,而是关心这个数值的序号, 比如还是那个身高的例子,我找到了最高身高,其实我是想对应上人的。用 np.argmax() 和 np.argmin() 就能搞定。

 

 另外一个时不时会用到的功能是,取天花板的值还是地板的值,这个在 AI 算法中也比较常见, 比如我要对其做整数话处理,抹除小数部分。

 那我如果还有更自由的取值截取空间时咋办?我可以用 np.clip() 来做上下界限的值截取。

 改变数据形态

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值