目录##

掌握numpy(一)

掌握numpy(二)

掌握numpy(三)

掌握numpy(四)

统计功能##

前面都是介绍numpy的一些特性,被称为数学运算神器怎么能少了统计功能呢

ndarray的方法###

a = np.array([[-2.5, 3.1, 7], [10, 11, 12]])
>>print "mean =", a.mean()
mean = 6.76666666667

上面mean没有指定参数,是将ndarray中得所有值相加,求得均值

>>a.mean(axis=1) #按行求均值
array([ 2.53, 11. ])
>>a.mean(axis=0) #按列求均值
array([ 3.75, 7.05, 9.5 ])

上面数据是2维的,如果是多维度的怎么办呢?

a = np.arange(24).reshape(2,3,4)
>>a
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
>>a.sum(axis=0)
array([[12, 14, 16, 18],# 12=(0+12)
[20, 22, 24, 26],#20=(4+16)
[28, 30, 32, 34]])
>>a.sum(axis=1),
array([[12, 15, 18, 21],#12=(0+4+8)
[48, 51, 54, 57]])
>>a.sum(axis=(0,2))
array([ 60, 92, 124])#60=(0+1+2+3 + 12+14+15+16+18)

下面是一些常用得数值统计方法

for func in (a.min,a.max,a.prod,a.std,a.var):
>> print func.__name__ ,"=",func()
min = -2.5
max = 12.0
prod = -71610.0 #内积
std = 5.08483584352
var = 25.8555555556

数值运算方法###

NumPy还 提供了许多常用的数值运算方法,像数值运算中的绝对值、三角和函数、对数等等。这些方法都是element-wise

a = np.array([[-2.5, 3.1, 7], [10, 11, 12]])
for func in (np.abs, np.sqrt, np.exp, np.log, np.sign, np.ceil, np.modf, np.isnan, np.cos):
print"\n", func.__name__
>>print(func(a))
absolute #绝对值
[[ 2.5 3.1 7. ]
[ 10. 11. 12. ]] sqrt
[[ nan 1.76068169 2.64575131] #不满足运算法则的返回nan
[ 3.16227766 3.31662479 3.46410162]] exp
[[ 8.20849986e-02 2.21979513e+01 1.09663316e+03]
[ 2.20264658e+04 5.98741417e+04 1.62754791e+05]] log
[[ nan 1.13140211 1.94591015]
[ 2.30258509 2.39789527 2.48490665]] sign
[[-1. 1. 1.]
[ 1. 1. 1.]] ceil #向上取整
[[ -2. 4. 7.]
[ 10. 11. 12.]] modf #返回的为一个元组=>(小数部分,整数部分)
(array([[-0.5, 0.1, 0. ],
[ 0. , 0. , 0. ]]), array([[ -2., 3., 7.],
[ 10., 11., 12.]])) isnan
[[False False False]
[False False False]] cos
[[-0.80114362 -0.99913515 0.75390225]
[-0.83907153 0.0044257 0.84385396]]

数组的index##

一维数组###

ndarray有着python原生数组的所有特性,例如切片(slice)

a=np.arange(9)
>>a
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>a[2:5]
array([2, 3, 4])
>>a[2:-1]
array([2, 3, 4, 5, 6, 7])
>>a[:2]
array([0, 1])
>>a[::-1]
array([8, 7, 6, 5, 4, 3, 2, 1, 0])

当然还有原生数组没有的特性

a[2:5]=-1
>>a
array([ 0, 1, -1, -1, -1, 5, 6, 7, 8])

有几点需要注意的

  • 1.不能用以下方式增长或者缩减ndarray数组
try:
a[2:5] = [1,2,3,4,5,6] # too long
except ValueError as e:
>>print(e)
cannot copy sequence with size 6 to array axis with dimension 3
  • 2.不能删除ndarray数组元素 #原生数组可以
try:
del a[2:5]
except ValueError as e:
>>print(e)
ValueError: cannot delete array elements
  • 3.修改切片数组的内容,原始数组值也发生变化
b = a[3:5]
b[0] = 999
>>b
array([999, 4])
>>a
array([ 0, 1, 2, 999, 4, 5, 6, 7, 8])

如果确定要拷贝数值,可以使用copy方法

b = a[3:5].copy()
b[0] = 999
>>a
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
b
>>array([999, 4])

多维数组###

多维的ndarray有许多神奇的方法

b = np.arange(24).reshape(4, 6)
>>b
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]])
>>b[1,1] #等价与b[1][1]
7
>>b[1,:]#第一行的所有元素
array([ 6, 7, 8, 9, 10, 11])
>>b[:,1]#第一列的所有元素
array([ 1, 7, 13, 19])

注意:下面的两种写法的不同

>>b[1,:]
array([ 6, 7, 8, 9, 10, 11]) # (6L,)
>>b[1:2,:]
array([[ 6, 7, 8, 9, 10, 11]])#(1L, 6L)

如果我只想要多维度数组中的第一行和最后一行/列呢?

>>b[(0,-1),:]
array([[ 0, 1, 2, 3, 4, 5],
[18, 19, 20, 21, 22, 23]])

上面的写法等价于

index = np.array([True,False,False,True])
>>b[index,:]
array([[ 0, 1, 2, 3, 4, 5],
[18, 19, 20, 21, 22, 23]])

np.ix_###

上面学习了那么多的知识,我们来要给小测验:数组b中第1行和第3行中第4和第6列的元素([[3,5],[15,17]])该怎么表示呢?

我猜你会这么写

>>b[(0,2),(3,5)]
array([ 3, 17])
>>b[[0,2],[3,5]]
array([ 3, 17])

上面的结果显然不是我们想要的,那么正确的写法是什么呢?这时候就需要ix_方法

index = np.ix_([0,2],[3,5])
>>index
(array([[0],
[2]]), array([[3, 5]]))
>>b[index]
array([[ 3, 5],
[15, 17]])

ndarray的遍历##

对数组的遍历是我们经常用的操作,对于numpy数组该由如何遍历呢?

接着使用上面的数组b,

for i in b:
>>print 'row:',i
row: [0 1 2 3 4 5]
row: [ 6 7 8 9 10 11]
row: [12 13 14 15 16 17]
row: [18 19 20 21 22 23]

如果想要遍历所有的元素呢

for i in b.flat:
>>print 'Element:',i
Element: 0
Element: 1
Element: 2
....
Element: 21
Element: 22
Element: 23

掌握numpy(三)的更多相关文章

  1. numpy 三个点的使用[...]

    numpy [...]语法简单使用 Python numpy中切片功能与列表切片类似,但功能更加强大 本文主讲numpy中[...]的简单使用,后续工作继续补充. import numpy >& ...

  2. numpy(三)

    广播: x= np.arange(12).reshape((3,4)) a= np.arange(3) b=np.arange(3)[;,np.newaxis] c=a+b a,b会扩散成公共的形状进 ...

  3. 掌握numpy(一)

    NumPy是一款用于科学计算的python包,强大之处在于矩阵的运算以及包含丰富的线性代数运算的支持.本文将对numpy一些常用的用法进行讲解,一来是对自己的知识进行梳理,二来作为一份备忘录供以后查阅 ...

  4. 掌握numpy(四)

    数组的累加(拼接) 在前面讲了使用切片方法能够对数组进行切分,使用copy对切片的数组进行复制,那么数组该如何拼接呢? a1 = np.full((2,3),1)#填充数组 a2 = np.full( ...

  5. 掌握numpy(二)

    目录 掌握numpy(一) 掌握numpy(二) 掌握numpy(三) 掌握numpy(四) 数组的reshape 顾名思义,就是对数组的形状进行改变,比如行变成列,一行变多行等. in place ...

  6. numpy 库使用

    numpy 库简单使用 一.numpy库简介 Python标准库中提供了一个array类型,用于保存数组类型的数据,然而这个类型不支持多维数据,不适合数值运算.作为Python的第三方库numpy便有 ...

  7. numpy 库简单使用

    numpy 库简单使用 一.numpy库简介 Python标准库中提供了一个array类型,用于保存数组类型的数据,然而这个类型不支持多维数据,不适合数值运算.作为Python的第三方库numpy便有 ...

  8. 《数据挖掘导论》实验课——实验一、数据处理之Numpy

    实验一.数据处理之Numpy 一.实验目的 1. 了解numpy库的基本功能 2. 掌握Numpy库的对数组的操作与运算 二.实验工具: 1. Anaconda 2. Numpy 三.Numpy简介 ...

  9. fedora 安装pylab 并简单绘制三角函数

    pylab 由 三个部分组成:scipy, matplotlab, numpy三部分组成,安装时需要分别安装这三部分,在fedora中,可以使用命令: sudo dnf install python- ...

随机推荐

  1. Echarts图表统计学习

    史上最全的Echarts图表学习文档 http://echarts.baidu.com/doc/doc.html 勤加练习,多做总结! http://www.stepday.com/topic/?79 ...

  2. c#使用GDI+简单绘图(二)

    // Create the in-memory bitmap where you will draw the image. // This bitmap is 300 pixels wide and ...

  3. 运用 finereport 和 oracle 结合开发报表思路大总结

    近排自己学习了一款软件finereport开发报表模块,自己总结了如何了解需求,分析需求,再进行实践应用开发,最后进行测试数据的准确性,部署报表到项目对应的模块中显示. 一.需求(根据需求文档分析) ...

  4. JQuery自定义插件详解之Banner图滚动插件

      前  言 JRedu JQuery是什么相信已经不需要详细介绍了.作为时下最火的JS库之一,JQuery将其"Write Less,Do More!"的口号发挥的极致.而帮助J ...

  5. Linux系列教程(一)——Linux系统简介

    本系列教程将完整的讲解整个Linux相关的知识,这是楼主学完之后重新对Linux知识体系的整理.从最基础的知识开始,对于一个完全不懂Linux系统的人,相信在看完整个系列教程之后,都能对Linux有一 ...

  6. C# 7.0 特性

    在昨天WR发布了vs17,vs17可以使用C#7.0,在之前,我写有一篇博客,关于C#7.0,参见:http://lindexi.oschina.io/lindexi/post/C-7.0/ 但是WR ...

  7. 赋值运算符函数__from <剑指Offer>

    前段时间忙于项目,难得偷得几日闲,为即将到来的就业季做准备.在面试时,应聘者要注意多和考官交流,只有具备良好的沟通能力,才能充分了解面试官的需求,从而有针对性地选择算法解决问题. 题目来源于<剑 ...

  8. JavaScript--我发现,原来你是这样的JS(再说引用类型,基本包装类型与个体内置对象)

    一.介绍 本篇是续上一篇的,引用类型的后篇,本篇主要是说基本包装类型和个体内置对象.如果你能收获一些知识,那我很高兴,很满足,哈哈哈,希望大家能愉快看完.如果你想学好一门技术,要不忘初心,方得始终. ...

  9. JS框架设计读书笔记之-异步

    setTimeout/setInterval 1. 如果回调执行时间大于间隔时间,真正的间隔时间会大一些. 2. 存在一个最小的时间间隔,即使seTimeout(fn,0),在IE6-IE8中大概为1 ...

  10. Android的主线程和子线程

    在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Co ...