Numpy使用4

上篇博客写到了numpy的索引与切片,这篇博客介绍numpy的一些数学统计上的使用和如何结合numpy实现对结构化文本的处理

通用函数

所谓的通用函数(ufunc)就是指元素级别的数组函数,你可以将其看做简单函数其接受一个或者多个标量值,产生一个或者多个标量值。

In [87]: arr
Out[87]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [88]: np.sq
np.sqrt     np.square   np.squeeze  

In [88]: np.sqrt(arr)
Out[88]: 
array([ 0.        ,  1.        ,  1.41421356,  1.73205081,  2.        ,
        2.23606798,  2.44948974,  2.64575131,  2.82842712,  3.        ])

In [92]: y = np.random.randn(10)

In [93]: x = np.random.randn(10)

In [94]: x
Out[94]: 
array([-1.21694813,  1.78409159, -1.65434122, -0.15399479,  1.60253837,
        0.74424786, -0.67561382, -0.40101547,  0.98082673, -2.02494822])

In [95]: y
Out[95]: 
array([-0.00402273, -0.06694182, -2.65686769, -0.39958789, -0.77770152,
        0.13560955,  0.80155845, -0.65633865, -0.10009588,  2.00409772])

In [96]: np.maxi
np.maximum         np.maximum_sctype  

In [96]: np.maximum(x,y)
Out[96]: 
array([-0.00402273,  1.78409159, -1.65434122, -0.15399479,  1.60253837,
        0.74424786,  0.80155845, -0.40101547,  0.98082673,  2.00409772])

类似与上面的函数还有很多,下表列出部分:

利用numpy进行数据处理

利用numpy强大的数组(矩阵)能力,可以将很多的数据处理的问题转化为对数组的处理问题

比如对一个数组将其中大于0的值置为2,小于0的置为-2,这个怎么做??? python的一般做法是遍历,但是这存在性能问题,我们看看numpy是怎么做的 利用numpy.where()可以简单的做到,where()函数是if condition x else y的矢量化版本,我们可以这么做:

In [97]: arr = np.random.randn(4,4)

In [98]: arr
Out[98]: 
array([[-1.91177362,  0.82087817,  0.74335108,  1.80535455],
       [-1.04152013, -1.55160244,  0.58826121,  0.0138859 ],
       [ 0.86341095,  2.0301454 ,  0.75151171, -0.38441971],
       [-0.95949818,  0.39064892,  0.17747275, -0.00499914]])

In [99]: np.where(arr>0, 2, -2) ## 矢量化版本的if condition
Out[99]: 
array([[-2,  2,  2,  2],
       [-2, -2,  2,  2],
       [ 2,  2,  2, -2],
       [-2,  2,  2, -2]])

(1)数学与统计

In [101]: arr = np.random.randn(4,4)

In [102]: arr
Out[102]: 
array([[ 1.22742206, -0.49602643,  0.06893939, -0.5974265 ],
       [ 1.33043955, -0.24695017,  1.39751381, -0.23691971],
       [-1.25554674,  0.37242292, -0.14985591, -0.11907288],
       [ 0.06103707, -1.28255389, -0.67935123, -1.35710905]])

In [103]: arr.mean()
Out[103]: -0.1226898557091208

In [104]: arr.mean(axis=0)
Out[104]: array([ 0.34083799, -0.41327689,  0.15931151, -0.57763203])

In [105]: arr.mean(axis=1)
Out[105]: array([ 0.05072713,  0.56102087, -0.28801315, -0.81449428])

In [106]: arr.sum()
Out[106]: -1.9630376913459329

In [107]: arr.sum(axis=0)
Out[107]: array([ 1.36335194, -1.65310755,  0.63724605, -2.31052813])

类似的方法还有很多,下图列出部分:

(2)数组的集合运算

看下例:

In [108]: values = np.array([2,3,1,6,7,4])

In [109]: values1 = np.array([2,6,8])

In [110]: np.in1d(values, values1) ## 判断values的元素是否在values1中
Out[110]: array([ True, False, False,  True, False, False], dtype=bool)

(3)文件的输入输出

主要是那个函数np.load()和np.save(),前者负责读取文件,后者负责写文件

In [112]: test_write = np.arange(10)

In [113]: np.save('test',test_write)  ## 会在当前目录下创建名叫"test.npy"的二进制文件

In [114]: load_test = np.load('test.npy')  ## 读入文件

In [115]: load_test
Out[115]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

还可以使用np.loadtxt(),通过制定分隔符(delimiter)来读取结构化的文本文件,这个我在博客Numpy使用1中介绍过,就不在多说了,需要的可以去看看

其它的特性还有些想关于线性代数方面的,这个大家自行百度。

其实存取结构化的数据(类似于表结构)numpy并不是很好的选择,之后我会写个介绍pandas的博客,这个对各种表结构的处理比numpy强大太多,numpy的强大之处在于其n-dim array的能力

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿人谷

对缓存的思考【续】——编写高速缓存友好代码

开篇 上一篇博文对缓存的思考——提高命中率详细介绍了高速缓存的组织结构,并通过实例说详细明了cpu从高速缓存中取数据的过程,对于缓存的工作机制应该有了清晰的认识...

19410
来自专栏HTML5学堂

2016.01.06 HTML5真题练习

HTML5学堂:每天一道题,强壮程序员!今日主要涉及01.05日,关于数组转换成字符串操作题目的解答,以及一道涉及数组操作的题目。 HTML5真题【2016.0...

2745
来自专栏技术博文

js实现php中sleep()延时的功能

1. jquery的$.delay()方法 设置一个延时来推迟执行队列中之后的项目。这个方法不能取代JS原生的setTimeout。 The .delay() ...

3348
来自专栏从流域到海域

《笨办法学Python》 第11课手记

《笨办法学Python》 第11课手记 本节课讲了一个用来输入的函数raw_input,而我们一直用的print其实是一个用来输出的函数。 原代码如下: pri...

1719
来自专栏JetpropelledSnake

Vue学习笔记之计算属性和侦听器

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如:

943
来自专栏coder修行路

Python爬虫从入门到放弃(十四)之 Scrapy框架中选择器的用法

Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分 Xpath是专门在X...

1748
来自专栏Web 开发

jQuery进阶,$.Deferred() 延迟对象

JS里面有大量的异步方法,写着写着,代码就会变得>>。多层嵌套的回调,很影响后续代码的维护,也许今天你还记得这块回调逻辑,明天你就很有可能被这回调姿势给坑了。

760
来自专栏机器学习养成记

【实用派】R语言中的便捷小操作

管道处理 管道处理避免了中间变量的生成,从而节省了内存,并且使代码直观易读,很大程度的简化代码。 R语言中,管道运算符为“dplyr”包中的“%>%”,指左边的...

2737
来自专栏软件开发

C语言 第七章 数组与字符串

一、数组 1.1、数组的概念 用来存储一组相同类型数据的数据结构。有点像班上放手机的手机袋,超市的储物柜。 特点:只能存放一种类型的数据,如全部是int型或者全...

1828
来自专栏谦谦君子修罗刀

RN手势

React Native框架底层的手势响应系统提供了响应处理器,PanResponder API将这些手势响应处理器再次进行封装,便于开发者对手势进行处理。 ...

27412

扫码关注云+社区