NumPy入门

qq:875880047

NumPy简介

• 官网链接:http://www.numpy.org/

• NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运

算,此外也针对数组运算提供大量的数学函数库。

• 作者介绍

• Jim Hugunin: http://www.linkedin.com/in/jimhugunin• Travis Oliphant: http://www.linkedin.com/in/teoliphant

基本功能

快速高效的多维数组对象ndarray

用于对数组执行元素级计算以及直接对数组执行数学运算的函数

用于读写硬盘上基于数组的数据集的工具

线性代数运算、傅里叶变换,以及随机数生成

用于将C、C++、Fortran代码集成到Python的工具

除了为Python提供快速的数组处理能力,NumPy在数据分析方面还有另外一

个主要作用,即作为在算法之间传递数据的容器。

效率对比

• 三种数据结构:list / array / numpy.array• 三种方法求和:for / sum / numpy.sum

• 例子代码:extra/perf_compare.py

NumPy的ndarray 创建ndarray• 数组创建函数

类型说明

array将输入数据(列表、元组、数组或其它序列类型)转换为ndarray。要么推断出dtype,

要么显示指定dtype。默认直接复制输入数据。

asarray将输入转换为darray,如果输入本身就是一个ndarray就不进行复制。

arange类似于内置的range,但返回一个ndarray而不是列表。

ones, ones_like根据指定形状和dtype创建一个全1数组。ones_like以另一个数组为参数,并根据其形

状和dtype创建一个全1数组。

zeros, zeros_like类似于ones和ones_like,只不过产生的是全0数组而已。

empty, empty_like创建数组,只分配内存空间但不填充任何值。

eye, identity创建一个正方的N * N单位矩阵

• 例子代码:the_numpy_ndarray/creating_ndarray.py

NumPy的ndarray NumPy数据类型• NumPy数据类型 I

类型说明

int8, uint8 - i1, u1有/无符号的8位整型

int16, uint16 - i2, u2有/无符号的16位整型

int32, uint32 - i4, u4有/无符号的32位整型

int64, uint64 - i8, u8有/无符号的64位整型

float16 - f2半精度浮点数

float32 - f4 or f标准的单精度浮点数,与C的float兼容。

float64 - f8 or d标准的双精度浮点数。与C的double和Python的float兼容。

float128 - f16 or g扩展精度浮点数

NumPy的ndarray NumPy数据类型• NumPy数据类型 II

类型说明

complex64/128/256 -

c8/16/32

分别用两个32位,64位或128位浮点数表示的复数。

bool - ?存储True和False值的布尔类型

object - OPython对象类型

string_ - S固定长度的字符串类型。S10代表长度为10的字符串。

unicode_ - U固定长度的unicode类型

• 创建ndarray时指定dtype类型

• 使用astype显示转换类型

• 例子代码:the_numpy_ndarray/creating_ndarray.py

NumPy的ndarray 数组和标量之间的运算

不用编写循环即可对数据执行批量运算

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

数组与标量的算术运算也会将那个标量值传播到各个元素

例子代码:

the_numpy_ndarray/operations_between_arrays_and_scalars.py

NumPy的ndarray 基本的索引和切片

• 索引原理

• 切片原理

• 例子代码: the_numpy_ndarray/basic_indexing_and_slicing.py

NumPy的ndarray 布尔型索引

• 布尔型数组的长度必须跟被索引的轴长度一致。

• 可以将布尔型数组跟切片、整数(或整数序列)混合使用• 例子代码: the_numpy_ndarray/boolean_indexing.py

NumPy的ndarray 花式索引

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

行索引。

一次传入多个索引数组会有一点特别。它返回的是一个一维数组,其中的元素

对应各个索引元组。

例子代码: the_numpy_ndarray/fancy_indexing.py

NumPy的ndarray 数组转置和轴对换

• 一维/二维数组转置

• 高维数组轴对换

• 例子代码:

the_numpy_ndarray/transposing_arrays_and_swapping_axes.py

NumPy的ndarray 快速的元素级数组函数• 一元函数 I

类型说明

abs, fabs计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs。

sqrt计算各元素的平方根。相当于arr ** 0.5

sqare计算各元素的平方。相当于arr ** 2

exp计算各元素的e^x

log, log10, log2, log1p分别为自然对数、底数为10的log、底数为2的log和log(1 + x)。

sign计算各元素的正负号:1(正数)、0(零)、-1(负数)。

ceil计算各元素的ceiling值,即大于等于该值的最小整数。

floor计算各元素的floor值,即小于等于该值的最小整数。

NumPy的ndarray 快速的元素级数组函数• 一元函数 II

类型说明

rint将各元素值四舍五入到最接近的整数,保留dtype。

modf将数组的小数部分与整数部分以两个独立数组的形式返还。

isnan返回一个表示“哪些值是NaN(这不是一个数字)”的布尔型数组

isfinite, isinf分别返回一个表示“哪些元素是有限的(非inf,非NaN)”或“哪些元素是

无穷的”的布尔型数组

cos, cosh, sin, sinh, tan, tanh普通型或双曲型三角函数

arccos, arccosh, arcsin, arcsinh,

arctan, arctanh

反三角函数

logical_not计算各元素not x的真值。相当于-arr。

NumPy的ndarray 快速的元素级数组函数• 二元函数 I

类型说明

add将数组中对应的元素相加

subtract从第一个数组中减去第二个数组中的元素

multiply数组元素相乘

divide, floor_divide除法或向下取整除法

power对第一个数组中的元素A和第二个数组中对应位置的元素B,计算A^B。

maximum, fmax元素级的最大值计算。fmax将忽略NaN。

minimum, fmin元素级的最小值计算。fmin将忽略NaN。

mod元素级的求模计算

NumPy的ndarray 快速的元素级数组函数• 二元函数 II

类型说明

copysign将第二个数组中的符号复制给第一个数组中的值

greater, greater_equal, less,

less_equal,equal, not_equal

执行元素级的比较,最终产生布尔型数组。

logical_and, logical_or,

logical_xor

执行元素级的真值逻辑运算,最终产生布尔型数组。

• 例子代码: universal_functions.py

利用数组进行数据处理 简介

• NumPy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需

要编写循环)。用数组表达式代替循环的做法,通常被称为矢量化。

• 矢量化数组运算要比等价的纯Python方式快上一两个数量级• 例子代码:data_processing_using_arrays/intro.py

利用数组进行数据处理 将条件逻辑表述为数组运算

列表推导的局限性

• 纯Python代码,速度不够快。• 无法应用于高维数组

where和where的嵌套

例子代码:

data_processing_using_arrays/expressing_conditional_logic_as_array_op

erations.py

利用数组进行数据处理 数学和统计方法• 数学和统计方法

类型说明

sum对数组中全部或某轴向的元素求和。零长度的数组的sum为0。

mean算术平均数。零长度的数组的mean为NaN。

std, var分别为标准差和方差,自由度可调(默认为n)。

min, max最大值和最小值

argmin分别为最大值和最小值的索引

cumsum所有元素的累计和

cumprod所有元素的累计积

利用数组进行数据处理 数学和统计方法

标准差和方差的解释

cumsum和cumprod的解释

带axis参数的统计函数

例子代码:

data_processing_using_arrays/mathematical_and_statistical_methods.py

利用数组进行数据处理 用于布尔型数组的方法

• sum对True值计数

• any和all测试布尔型数组,对于非布尔型数组,所有非0元素将会被当做True。

• 例子代码:

data_processing_using_arrays/methods_for_boolean_arrays.py

利用数组进行数据处理 排序

• 直接排序

• 指定轴排序

• 例子代码:data_processing_using_arrays/sorting.py

利用数组进行数据处理 去重以及其它集合运算• 去重以及其它集合运算

类型说明

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)集合的异或,即存在于一个数组中但不同时存在于两个数组中的元素。

• 例子代码: data_processing_using_arrays/unique_and_other_set_logic.py

数组文件的输入输出

• 将数组以二进制格式保存到磁盘

• 存取文本文件

• 例子代码

• file_input_and_output_with_arrays/saving_and_loading_text_files.py

• file_input_and_output_with_arrays/storing_arrays_on_disk_in_binary_format.py

线性代数

• 常用的numpy.linalg函数 I

类型说明

diag以一维数组的形式返回方阵的对角线(或非对角线元素),获将一维数组转换

为方阵(非对角线元素为0)。

dot矩阵乘法

trace计算对角线元素的和

det计算矩阵行列式

eig计算方阵的特征值和特征向量

inv计算方阵的逆

线性代数

• 常用的numpy.linalg函数 II

类型说明

pinv计算矩阵的Moore-Penrose伪逆

qr计算QR分解

svd计算奇异值分解

solve解线性方程Ax = b,其中A为一个方阵。

lstsq计算Ax = b的最小二乘解

• 例子代码: linear_algebra.py

随机数生成

• 部分numpy.random函数 I

类型说明

seed确定随机数生成器的种子

permutation返回一个序列的随机排列或返回一个随机排列的返回

shuffle对一个序列就地随机乱序

rand产生均匀分布的样本值

randint从给定的上下限范围内随机选取整数

randn产生正态分布(平均值为0,标准差为1)

binomial产生二项分布的样本值

随机数生成

• 部分numpy.random函数 II

类型说明

normal产生正态(高斯)分布的样本值

beta产生Beta分布的样本值

chisquare产生卡方分布的样本值

gamma产Gamma分布的样本值

uniform产生在[0, 1]中均匀分布的样本值

• 例子代码: random_number_generation.py

高级应用 数组重塑

• reshape重塑数组

• -1自动推导维度大小

• 例子代码:advanced_array_manipulation/reshaping_arrays.py

高级应用 数组的合并和拆分• 数组连接函数

类型说明

concatenate最一般化的连接,沿一条轴连接一组数组

vstack, row_stack以面向行的方式对数组进行堆叠(沿轴0)

hstack,以面向行的方式对数组进行堆叠(沿轴1)

column_stack类似于hstack,但是会先将一维数组转换为二维列向量。

dstack以面向“深度”的方式对数组进行堆叠(沿轴2)

split沿指定轴在指定的位置拆分数组

hsplit, vsplit, dsplitsplit的便捷化函数,分别沿着轴0、轴1和轴2进行拆分。

高级应用 数组的合并和拆分

• _r对象

• _c对象

• 例子代码:

advanced_array_manipulation/concatenating_and_splitting_arrays.py

高级应用 元素的重复操作

• _tile

• _repeat

• 例子代码:advanced_array_manipulation/repeating_elements.py

高级应用 花式索引的等价函数

• take

• put

• 例子代码:advanced_array_manipulation/fancy_indexing_equivalents.py

例题分析 距离矩阵计算

给定m × n阶矩阵X,满足X = [x1, x2, ... xn],这里第i列向量是m维向量。

求n × n矩阵,使得Dij = ||xi - xj||2

例题分析 距离矩阵计算

• 方法1:标准方法计算Dij

• D[i, j] = numpy.linalg.norm(X[:, i], X[:, j) ** 2

• 方法2:利用dot计算Dij

• d=X[:,i]-X[:,j]

• D[i, j] = numpy.dot(d, d)

例题分析 距离矩阵计算

• 方法3:减少dot调用次数

Dij = (xi - xj)T(xi - xj) = xiTxi - 2xiTxj + xjTxj

G = numpy.dot(X.T, X)• Dij =Gii -2Gij +Gjj

例题分析 距离矩阵计算

• 方法4:利用重复操作替代外部循环

在方法3的基础上,将D表达为H + K - 2G

Hij =Gii,Kij =Gjj

H = numpy.title(np.diag(G), (n, 1))

K=HT

D=H+HT-2G

• 例子代码:extra/dist_matrix.py


有想学习python或 人工智能,数据分析,算法以及机器学习的请联系我,qq:875880047 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容