Numpy基础学习

  Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。

  主要的功能:

    1、ndarray,一个具有矢量运算和复杂广播工能的快速且节省空间的多维数组

    2、用于对整组数据进行快速运算的标准数据函数(无需编写循环)

    3、用于读写磁盘数据的工具以及用于操作内存映射文件的工具

    4、线性代数、随机数生成以及傅里叶变换功能

    5、用于集成由C、C++、Fortran等语言编写的代码的工具

  一、Numpy的ndarray:一种多维数组对象、

    numpy最重要的特点:

      1、其N维数组对象(ndarray)

      2、是一个快速灵活的大数据容器

      3、可以利用这种数组对整块数据进行数学运算,其语法和标量元素之间的运算一样

      4、ndarray中的所有元素必须是相同类型的。每个数组都有一个shape(表示各维度大小的元祖)和dtype(说明数组数据的对象)

  1.1 ndarray的创建 

 1 import numpy as np
 2
 3 data = [1,2,3,4]
 4 ‘‘‘
 5 array([1, 2, 3, 4])
 6 ‘‘‘
 7 arr = np.array(data)
 8
 9 #1
10 arr.ndim  # 数组维度
11
12 #(4,)
13 arr.shape  # 数组各维度大小的元祖
 1 import numpy as np
 2
 3 #额外能创建ndarray的方法
 4
 5 np.zeros(10)  # 创建指定长度形状的数组, 全0
 6 np.zeros((3,2))
 7 np.zeros((1,2,3))
 8
 9 np.ones()   # 创建指定长度形状的数组, 全1
10
11 np.empty((2,3,2))  # 创建没有任何具体值的数组

  1.2 ndarray的数据类型

    Numpy的数据类型

类型 说明
int8、uint8 有符号和无符号的8位(一个字节)整型
int16、uint16 有符号和无符号的16位(两个个字节)整型
int32、uint32 有符号和无符号的32位(三个字节)整型
int64、uint64 有符号和无符号的64位(四个字节)整型
float16 半精度浮点数
float32 标准的单精度浮点数。与C的float兼容
float64 标准的双精度浮点数。与C的double和Python的float对象兼容
float128 扩展精度浮点数
complex64、complex128 分别用两个32位 、64位或128位浮点数表示的复数
bool           存储Ture和Flase值的布尔类型
object Python对象类型
String_   固定长度的字符串类型
Unicode_ 固定长度的Unicode类型(字节数由平台决定)

    dtype是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息。

1 import numpy  as np
2
3 arr = np.array([1,2,3], dtype=np.float64)
4 arr.dtype
5
6 arr.astype(np.float32)  # 转换为dtype

  二、数组和标量之间的运算

    大小相等的数组之间的任何算术运算都会将运算应用到元素级别

 1 import numpy as np
 2
 3 arr1 = np.array([[1,2,3],[3,4,5]])
 4 arr2 = np.array([[6,7,8],[9,10,11]])
 5
 6 ‘‘‘
 7 array([[ 7,  9, 11],
 8        [12, 14, 16]])
 9 ‘‘‘
10 arr1 + arr2
11
12
13 ‘‘‘
14 array([[-5, -5, -5],
15        [-6, -6, -6]])
16 ‘‘‘
17 arr1 - arr2
18
19 ‘‘‘
20 array([[ 6, 14, 24],
21        [27, 40, 55]])
22 ‘‘‘
23 arr1 * arr2
24
25 ‘‘‘
26 array([[ 0.16666667,  0.28571429,  0.375     ],
27        [ 0.33333333,  0.4       ,  0.45454545]])
28 ‘‘‘
29 arr1 / arr2

    不同大小的数组之间的运算叫做广播(broadcasting)会在后面的内容中单独讲,本身是一个非常重要的概念

  三、基本的索引和切片

    一维数组的索引和切片和Python列表的功能差不多,这里只做简单的举例,不做更多说明。

    区别的地方需要单独说明:1、在numpy的数组中,如果你将一个标量值赋值给一个切片时,例如arr[3:4] = 8,该值就会自动赋值给这个切片选区中,即(3,4]位置上的值都变成8;2、numpy中数组的切片时原始数组的视图,数据不会被复制,视图上的任何修改都会直接反应到原数组上。

 1 import numpy as np
 2
 3 arr = np.array([1,2,3,4,5,6])
 4
 5 arr[2,4] = 44
 6
 7 ‘‘‘
 8 array([1,2,44,44,5,6])
 9 ‘‘‘
10 print(arr)

    二维数组中,各个索引位置上的元素不再是标量而是一维数组,依次类推多维也是这样

import numpy as np

arr2d = np.array([[1,2,3],[2,3,4],[3,4,5]])

‘‘‘
array([3,4,5])
‘‘‘
arr2d[2]

arr2d[0][2]  # 等价于 arr2d[0,2]

    二维数组的索引方式:纵轴表示 axis0,横轴表示axis1

    ndarray的切片语法跟Python列表这样的一维对象差不多,在多维度上也是一样的,但是我们需要记住各个索引位置的元素不再是标量二维一维数组

1 import numpty as np
2
3 arr = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]])
4
5 ‘‘‘
6 array([[1,2,3],[2,3,4]])
7 ‘‘‘
8 arr[:2]
1 import numpty as np
2
3 arr = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]])
4
5 ‘‘‘
6 array([[1],[2]])
7 ‘‘‘
8 arr[:2,:,1]

  四、布尔型索引

    可以对ndarray中的数据做布尔类型的判断截取

 1 import numpy as np
 2
 3 arr = np.array([[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]])
 4
 5 ‘‘‘
 6 array([4, 5, 4, 5, 6, 4, 5, 6, 7])
 7 ‘‘‘
 8 arr[arr > 3]
 9
10 ‘‘‘
11 array([3, 3, 3])
12 ‘‘‘
13 arr[arr == 3]
14
15 ‘‘‘
16 array([1, 2, 2])
17 ‘‘‘
18 arr[arr < 3]

  五、花式索引

    花式索引(Fancy indexing)是一个Numpy术语,它指的是利用整数数组进行索引。

    为了以特定顺序选取行子集,只需要传入一个用于指定顺序的整数列表或者ndarray,以下为例子:

 1 import numpy as np
 2
 3 ‘‘‘
 4 array([[ 0.,  0.,  0.,  0.],
 5        [ 1.,  1.,  1.,  1.],
 6        [ 2.,  2.,  2.,  2.],
 7        [ 3.,  3.,  3.,  3.],
 8        [ 4.,  4.,  4.,  4.],
 9        [ 5.,  5.,  5.,  5.],
10        [ 6.,  6.,  6.,  6.],
11        [ 7.,  7.,  7.,  7.]])
12 ‘‘‘
13 arr
14
15 ‘‘‘
16 array([[ 4.,  4.,  4.,  4.],
17        [ 3.,  3.,  3.,  3.],
18        [ 0.,  0.,  0.,  0.],
19        [ 6.,  6.,  6.,  6.]])
20 ‘‘‘
21 arrr[[4,3,0,6]]  # 传入了指定顺序的整数列,4,3,0,6是顺序
22
23 arr[[-1,-2,-5]]  # 负数从尾部开始取,顺序

    一次传入多个索引数组的情况,以下为实例:

 1 import numpy as np
 2
 3 ‘‘‘
 4 array([[ 0,  1,  2,  3],
 5        [ 4,  5,  6,  7],
 6        [ 8,  9, 10, 11],
 7        [12, 13, 14, 15],
 8        [16, 17, 18, 19],
 9        [20, 21, 22, 23],
10        [24, 25, 26, 27],
11        [28, 29, 30, 31]])
12 ‘‘‘
13 arr = np.arange(32).reshape((8,4))
14
15 ‘‘‘
16 array([4,23,29,10])
17 ‘‘‘
18 arr[[1,5,7,2],[0,3,1,2]]  #最终取出的数据是 坐标(1,0)(5,3)(7,1)(2,2)
19
20 ‘‘‘
21 array([[ 4,  7,  5,  6],
22        [20, 23, 21, 22],
23        [28, 31, 29, 30],
24        [ 8, 11,  9, 10]])
25 ‘‘‘
26 arr[[1,5,7,2]][:,[0,3,1,2]]  # 获取矩形区域
27
28 ‘‘‘
29 np.ix()  将两个一维整数数组转换为一个用于选取方形区域的索引器
30 ‘‘‘
31 arr[np.ix([1,5,7,2],[0,3,1,2])]  # 得到和上面一样的结果

  六、常用一元函数

函数 说明
abs、fabs 计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs
sqrt   计算各元素的平方根。相当于arr**0.5
square 计算各元素的平方。相当于arr**2
exp 计算各元素的指数
log log10 log2 log1p 分别为自然对数(底数为e)、底数为10的log、底数为2的log 、 log(1+x)
sign 计算各元素的正负号:1正数,0零,-1负数
ceil   计算各元素的ceiling值,即大于等于该值的最小整数
floor  计算各元素的floor值,即小于等于该值的最大整数
rint 将各元素值四舍五入到最接近的整数,保留dtype
modf 将数组的小数和整数部分以两个独立数组的形式返回
isnan 返回一个表示NAN的布尔型数组
isfinite    isinf 分别返回一个表示,那些元素是有穷的 或者 哪些元素是无穷的 布尔类型数组
cos  cosh  sin  sinh 普通型和双曲型三角函数

arccos arccosh arcsin

arcsinh  arctan  arctanh

反三角函数
logical_not 计算各元素not x的真值。相当于-arr

  七、二元常用函数

函数 说明
add 将数组中对应的元素相加
subtract 从第一个数组中减去第二个数组中的元素
multiply 数组元素相乘
divide、floor_divide 除法或向下圆除法
power 对第一个数组中的元素A,根据第二个数组中的相应元素B,计算AB
maximum、fmax 计算元素级的最大值  fmax将忽略NaN
minimum、fmin 计算元素级的最小值计算  fmin将忽略NaN 
mod 元素级的求模计算(除法的余数)
copysign 将第二个数组中的值的符号复制给第一个数组中的值

greater、greater_equal

less、less_equal

equal、not_equal


执行元素级的比较运算,最终产生布尔型数组。相当于>  >= <=

< == !=


logical_and logical_or

logical_xor

执行元素级的真值逻辑运算。相当于& | ^

  八、基本数组统计方法

方法 说明
sum 对数组中全部或某轴向的元素求和。零长度的数组和sum为0
mean 算术平均数。零长度的数组的mean为NAN
std、var 分别为标准差和方差,自由度可调(默认为n)
min、max 最大值和最小值
argmin、argmax 分别为最大和最小元素的索引
cumsum 所有元素的累计和
comprod 所有元素的累计积

    作为布尔类型数组的方法

    arr.any()  数组中是否存在一个或多个True

    arr.all()  数组中是否所有的值都为True

    排序:arr.sort()  返回排序后的数组

  九、数组的集合运算

方法 说明
unique(x) 计算x中的唯一元素,并返回有序结果
intersect1d(x,y) 计算x和y中的公共元素,并返回有序结果
union1d(x,y) 计算x和y的并集,并返回有序结果
in1d(x,y) 得到一个表示‘x的元素是包含于y’的布尔数组
setdiff1d(x,y) 集合的差,即元素在x中且不在y中
setxor1d(x,y) 集合的对称差,即存在于一个数组中单不同时存在于两个数组中的元素

内容参考自《利用Python进行数据分析》

时间: 2024-11-06 03:44:54

Numpy基础学习的相关文章

Numpy 基础学习

Numpy是python科学计算的基础包,为python提供快速的数组处理能力,也可以作为在算法之间传递数据的容器 安装相关软件包 安装需要的包 pip3 install numpy/pandas/mtaplotlib/ipython/scipy/xlrd/lxml/basemap/pymogo/PyQt/statsmodels/PyTables 验证ipython Numpy NumPy的主要对象是同质多维数组.它是一张表,所有元素(通常是数字)的类型都相同,并通过正整数元组索引.在NumPy

[转]python与numpy基础

来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb python与numpy基础 寒小阳(2016年6月) Python介绍 如果你问我没有编程基础,想学习一门语言,我一定会首推给你Python类似伪代码的书写方式,让你能够集中精力去解决问题,而不是花费大量的时间在开发和debug上同时得益于Numpy/Scipy这样的科学计算库,使得其有非常高效

蓝鸥零基础学习HTML5—html+css基础

蓝鸥零基础学习HTML5-html+css基础 一.课程目标 1.了解前端开发职位:2.掌握常用标签以及语义及用法:3.掌握常用css的特性,掌握基础布局技巧:4.掌握整站规划概念. 二.适用人群 零基础积极学习html5者 三.课程简介 本课程主要讲解了 html+css的基础知识,包括html模板.标签.css基础样式.布局.表格表单.整站等等,是进行前端开发的基础.Html+css是前端开发的基础,大部分前端开发工程都需要从html+css布局开始,html+css的基础非常重要,是前端开

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Linux新手入门书籍推荐 鸟哥的linux私房菜-基础学习篇

这本书写的不错.赞~\(≧▽≦)/~ 2017-02-24 下午,我开始在Linux下写第一个.c程序,在终端打印hello world.gcc 源代码文件之后,输出可执行文件,但是 当我输入文件名执行它的时候,却提示我 无法找到命令.于是我找百度,查资料,花了半个小时,终于找到解决方法了, 输入"./filename"即可.... 2017-02-25 我看<基础学习篇>这本书,在P158页下面的例题讲解中找到了昨天下午异常的解析.我就很是感慨,心想:要是早看这本书,半个

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];    

零基础学习 Hadoop 如何下手

想学习hadoop,可是苦于自己没有任何的基础,不知道该如何下手,也不知道自己能不能学会.其实零基础学习hadoop,没有想象的那么困难.曾经我也是一位小白,刚接触到云计算,想过培训,但是培训机构的选择也让我很纠结,就自己开始去摸索学习,现在我把自己的学习思路整理一下,希望对大家有帮助. 首先整体说一下学习过程给大家借鉴: 一.了解hadoop: 这里不具体阐述概念,有兴趣的同学可以自己上网去查.我们知道hadoop,有单机安装,伪分布安装和分布安装.同时hadoop的环境是Linux,所以我们

HTML&CSS基础学习笔记13—无序列表

无序列表 有时我们的工作繁忙,杂事很多,怕忘记,就会把事情一件件列出来,防止忘记. 它们的排列顺序对于我们来说并不重要,可以随意调换,我们将它称为无序列表,HTML里用<ul>标签来表示无序列表,列表里的项目则用<li>标签来表示: 1 2 3 4 5 <ul>     <li></li>     <li></li>     ... </ul> 看一段实例代码: 对于的浏览器显示结果是这样的: 更多内容学习,请