《python数据科学》笔记  在线版地址:https://github.com/jakevdp/PythonDataScienceHandbook

1、常用np简写

import numpy as np

2、nbarray

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

数组形状(shape):表示各维度大小;

size:数组元素的总个数;

dtype:说明数据类型的对象;

ndim:维度

2.1  创建nbarray

array函数

#整数
np.array([1,2,5,4,3]) #浮点数,整数向上转换为浮点数
np.array([3.14, 4, 2, 3]) #指定数据类型
np.array([1,2,3,5],dtype='float32') #多维
np.array([range(i,i+3) for i in [1.2.3]])

其他函数

#全0
np.zeros(10) #全1
np.ones((3, 5)) #全空,未初始化的随意值
np.empty((2,3,2)) #全为3.14的数组
np.full((3, 5), 3.14) #range数组版
np.arange(0, 20, 2) #均匀分布(start,stop,num)true包括stop,false不包括stop
np.linspace(0, 1, 5) #单位矩阵
np.eye(3) #[0,1)间随机数
np.random.random((3, 3) #正态分布随机数组(均值,标准差)
np.random.normal(0, 1, (3, 3)) #[0,10)随机整数
np.random.randint(0, 10, (3, 3))

2.2 ndaray的数据类型

numpy是c构造

Data type Description
bool_ Boolean (True or False) stored as a byte
int_ Default integer type (same as C long; normally either int64 or int32)
intc Identical to C int (normally int32 or int64)
intp Integer used for indexing (same as C ssize_t; normally either int32 or int64)
int8 Byte (-128 to 127)
int16 Integer (-32768 to 32767)
int32 Integer (-2147483648 to 2147483647)
int64 Integer (-9223372036854775808 to 9223372036854775807)
uint8 Unsigned integer (0 to 255)
uint16 Unsigned integer (0 to 65535)
uint32 Unsigned integer (0 to 4294967295)
uint64 Unsigned integer (0 to 18446744073709551615)
float_ Shorthand for float64.
float16 Half precision float: sign bit, 5 bits exponent, 10 bits mantissa
float32 Single precision float: sign bit, 8 bits exponent, 23 bits mantissa
float64 Double precision float: sign bit, 11 bits exponent, 52 bits mantissa
complex_ Shorthand for complex128.
complex64 Complex number, represented by two 32-bit floats
complex128 Complex number, represented by two 64-bit floats

3 数组操作

3.1数组索引

3.1.1简单索引

和python列表索引类似,从0开始计数,负值即从末尾索引,最后一位为-1。

一维数组x[i];多维数组可用逗号分隔来获取。

eg:array([1,2,3],

[2,3,7],

[3,4,5])

x[0,0]=x[0][0]:1      x[2,1]:4

3.1.1花哨的索引

传递的是索引数组而不是单个标量,一次性获得多个数组元素。

结果的形状与索引数组一致

eg:[51 92 14 71 60 20 82 86 74 74]

In [4]:ind = np.array([[3, 7],
[4, 5]])
x[ind]
Out[4]:array([[71, 86],
[60, 20]])

返回的值是广播后的索引数组的形状。

广播:即数组计算的通用规则。

如果进行运算的大小数组不同,会将数组进行扩展,具体规则为:

①如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补1.

②如果两个数组的形状在任何一个维度上都不匹配,数组形状沿着维度为1的维度扩展以匹配另外一个数组的形状。

③如果两个数组的形状在任何一个维度上都不匹配且没有一个维度等于1将引发异常。

注意规则为在左边补全,在右边补不允许,可以使用变形数组来实现。

广播可以用来进行数组数据的归一化、基于二维函数显示数据等。

用法:

①花哨的索引还可以和其他索引方案进行组合形成更强大的索引操作。

x[[ 0    1    2    3]

[ 4    5    6    7]

[ 8    9   10 11]]

X[2, [2, 0, 1]]:array([10, 8, 9])

也可以和切片、掩码结合起来。

②可以用来选择随机点,如选择20个随机的不重复的索引值:

a=np.random.choice[X.shape[0],20,replace=False]
selection=X[a]

可以用来快速分割数据。

③可以用来修改值:x[i] -=10

重复的索引可能会和预期不同,at()方法可以用来进行累加。

④数据区间划分

3.2数组切片

符号用:表示,x[start:stop:step],注意取值是[ ),step为负值表示为逆序

多维用冒号分割。,可用一个冒号表示空切片,在获取行时可省略。

数据切片返回的值是视图而不是副本,而在python列表中获取的是副本。

如果需要获取副本可用copy()实现。x[:2,:2].copy()

3.3数组变形

通过reshape()函数实现,大小必须一致。

还可以通过newaxis关键字

3.4数组拼接和分裂

拼接主要由np.concatenate,np.vstack(垂直栈),np.hstack(水平栈)实现

np.concatenate[]可拼接二维数组,axis=0/1

拼接主要由np.split,np.hsplit,np.vsplit来实现。np.dsplit将沿第三个维度分裂。

可以向函数传递一个索引列表作为参数,索引列表记录分裂点位置,N分裂点会有N+1个子数组。

4 通用函数

4.1函数

Numpy为很多操作提供了静态的可编译程序的接口,也被成为向量操作,可以很方便地对数组进行操作,一位内这种方法被用于将循环推送到Numpy下的编译层,所以速度会较快。

eg:np.array(5)/np.arrange(1,6)

通用函数使用python原生的算术运算符

+ np.add Addition (e.g., 1 + 1 = 2)
- np.subtract Subtraction (e.g., 3 - 2 = 1)
- np.negative Unary negation (e.g., -2)
* np.multiply Multiplication (e.g., 2 * 3 = 6)
/ np.divide Division (e.g., 3 / 2 = 1.5)
// np.floor_divide Floor division (e.g., 3 // 2 = 1)
** np.power Exponentiation (e.g., 2 ** 3 = 8)
% np.mod Modulus/remainder (e.g., 9 % 4 =

绝对值函数:np.abs()复数时返回模

三角函数:np.sin();np.cos();np.tan();逆三角函数:np.arcsin();np.arccos();np.arctan()

指数函数:np.exp();np.ex2();np.power(a, )a为底数。x值较小时,可使用np.expm1(x)    (exp(x)-1)

对数函数:np.log();np.log2();np.log10()。x值较小时,可使用np.log1p(x)    (log(1+x))

专用的通用函数:scipy.special包含了一些专用计算函数。

4.2高级函数通用特性

指定输出:可以通过out参数指定存放位置。数组较大时慎用

聚合:reduce方法可指定重复执行。如对add调用会返回所有元素的和。需要存储中间结果时可使用accumulate

外积:可用outer方法获得两个不同输入数组所有元素对的函数运算结果。

5 聚合

多维度聚合,常用操作是沿着一行或一列聚合,可以通过axis参数指定轴的方向。

Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin np.nanargmin Find index of minimum value
np.argmax np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true

6 布尔掩码

Operator Equivalent ufunc   Operator Equivalent ufunc
== np.equal   != np.not_equal
< np.less   <= np.less_equal
> np.greater   >= np.greater_equal

统计True个数:np.count_nonzero()/np.sum()

检查是否为True:np.any();np.all()

布尔运算符:A AND B and NOT (NOT A OR NOT B)

Operator Equivalent ufunc   Operator Equivalent ufunc
& np.bitwise_and   | np.bitwise_or
^ np.bitwise_xor   ~ np.bitwise_not

使用布尔数组作为掩码,通过掩码选择数据的子数据集。抽出小于5的:x[x<5]

and or判断整个对象的真假;逻辑操作符指每个对象的比特位。

7 数组的排序

np.sort()不修改原始数组;修改可用数组的sort()

np.argsort()返回排好序的索引值‘。

部分排序:np.partition(数组,k)

都可用属性axis沿行或列进行排列。

8 结构化数据

通过指定复合数据类型可以构造结构化数组:

data = np.zeros(4, dtype={'names':('name', 'age', 'weight'),
'formats':('U10', 'i4', 'f8')})

然后可以通过索引或名称查找相应值,还可以用布尔掩码进行筛选等。

可以使用np.dtype构造

np.dtype({'names':('name', 'age', 'weight'),
'formats':((np.str_, 10), int, np.float32)}) np.dtype([('name', 'S10'), ('age', 'i4'), ('weight', 'f8')]) np.dtype('S10,i4,f8')
output:dtype([('f0', 'S10'), ('f1', '<i4'), ('f2', '<f8')])

元素甚至可以指定为数组或矩阵。

np.recarray记录数组

numpy小结的更多相关文章

  1. Numpy 小结

    Python 真火来学习一下,先来看一个库 NumPy.NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1. 读取文件 num ...

  2. numpy小结(一)

    1.np.zero(10)     创建一个包含10个元素的一维数组 np.ones((10,10))     创建一个包含10*10个元素1的二维数组 2.np.arange(10,50)      ...

  3. python 基础及资料汇总

    Python 包.模块.类以及代码文件和目录的一种管理方案     Numpy 小结   用 Python 3 的 async / await 做异步编程  K-means 在 Python 中的实现 ...

  4. numpy用法小结

    前言 个人感觉网上对numpy的总结感觉不够详尽细致,在这里我对numpy做个相对细致的小结吧,在数据分析与人工智能方面会有所涉及到的东西在这里都说说吧,也是对自己学习的一种小结! numpy用法的介 ...

  5. Numpy 用法小结

    1.  asarray 函数 可以将输入数据转化为矩阵格式. 输入数据可以是(列表,元组,列表的列表,元组的元组,元组的列表等这些数组形式). >>> asarray([(1,2,3 ...

  6. numpy.random模块用法小结

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9751471.html 1.np.random.random()函数参数 np.random.r ...

  7. scikit-learn随机森林调参小结

    在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...

  8. scikit-learn 梯度提升树(GBDT)调参小结

    在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...

  9. scikit-learn Adaboost类库使用小结

    在集成学习之Adaboost算法原理小结中,我们对Adaboost的算法原理做了一个总结.这里我们就从实用的角度对scikit-learn中Adaboost类库的使用做一个小结,重点对调参的注意事项做 ...

随机推荐

  1. Python insert()方法--list

    描述 insert()方法:用于向列表中指定的索引位置之前插入新的对象,因为是在对应目标之前插入,故此方法无法像append()方法一样将对象添加到列表末尾. 语法 语法格式:list.insert( ...

  2. fiddler 安装证书问题,和安装完后,浏览器无法访问问题

    安装证书问题 https://blog.csdn.net/l1336037686/article/details/78322014 浏览器无法访问问题 https://blog.csdn.net/u0 ...

  3. Lock和Synchronized

    1.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取锁2.Lock中的某些锁允许对共享资源的并发访问,如ReadWriteLock读写锁,readLock()获取读锁,wri ...

  4. 关于 RESTful API 中 HTTP 状态码的定义

    最近正好使用了一会儿 Koa ,在这说一下自己对各个 请求码的见解和使用场景,懒人直接看 200.400.401.403.404.500 就可以了. 其中 2XX/3XX 其实都是请求成功,但是结果不 ...

  5. 时间、日历(time、calendar、datatime)

    import time import calendar import datatime #获取代码运行的时间差 start = time.time() end = time.time() print( ...

  6. 学习animate.css包含了一组炫酷、有趣、跨浏览器的动画

    1.animate.css包含了一组炫酷.有趣.跨浏览器的动画,可以在你的项目中直接使用. 第一步:引入animate.css样式文件或者引入某些平台的CDN文件: <head> < ...

  7. encodeURIComponent 和 decodeURIComponent 对字符串url编码 用于url拼字符传值

  8. MongoDB3.2新特性之文档验证

    官方参考: https://docs.mongodb.org/master/core/document-validation/ 文档验证是3.2的重要新特性,添加验证条件的情形无非两种,一是在创建集合 ...

  9. [TJOI2009]猜数字

    题目描述 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意 ...

  10. php普通传值和引用传值 (相当通俗易懂的一篇讲解)

    首先,要理解变量名存储在内存栈中,它是指向堆中具体内存的地址,通过变量名查找堆中的内存; 普通传值,传值以后,是不同的地址名称,指向不同的内存实体; 引用传值,传引用后,是不同的地址名称,但都指向同一 ...