NumPy 快速入门

1、Numpy介绍

NumPy是Python语言的一个扩充程序库。支持高阶大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,其运行效率几乎都可以与编译过的等效C语言代码一样快。

2、创建数组

数组和列表的区别,列表可以存储任一类型的数据,而数组只能存储一种类型的数据

>>> import numpy as np
>>> x = np.array([1,2,3])
>>> x
array([1, 2, 3])
>>> type(x)
<class 'numpy.ndarray'>

#生成一维数组,默认值为0,类型为float
>>> a = np.zeros(10,dtype=int)
>>> a
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
#查看数组类型
>>> a.dtype
dtype('int32')

#生成多维数组,默认值为1,类型为float
>>> np.ones((3,3),dtype=float)
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

#指定默认值
>>> np.full((2,3),3.14)
array([[ 3.14,  3.14,  3.14],
       [ 3.14,  3.14,  3.14]])

#随机默认值
>>> np.random.random((3,3))
array([[ 0.91593995,  0.60096071,  0.38946746],
       [ 0.31114094,  0.20312764,  0.41675188],
       [ 0.34502694,  0.80952597,  0.52391742]])
>>> np.random.randint(0,10,(3,3))
array([[9, 0, 5],
       [8, 2, 4],
       [8, 9, 5]])

#返回ndarray对象,包含给定范围内的等间隔值
>>> np.arange(0,10,2)
array([0, 2, 4, 6, 8])

#此函数类似于arange()函数。 在此函数中,指定了范围之间的均匀间隔数量,而不是步长。
>>> np.linspace(0,3,10)
array([ 0.        ,  0.33333333,  0.66666667,  1.        ,  1.33333333,
        1.66666667,  2.        ,  2.33333333,  2.66666667,  3.        ])

#生成N维单位矩阵
>>> np.eye(3)
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

3、数组中的访问

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

4、数组的一些属性

>>> a
array([[1, 2, 3],
       [3, 4, 5],
       [4, 5, 6]])
#ndim 返回数组的维数。
>>> print(a.ndim)
2
#shape 返回一个包含数组维度的元组,它也可以用于调整数组大小。
>>> print(a.shape)
(3, 3)
#size
>>> print(a.size)
9
#dtype 类型
>>> print(a.dtype)
int32
#itemsize 这一数组属性返回数组中每个元素的字节单位长度。
>>> print(a.itemsize)
4
#nbytes
>>> print(a.nbytes)
36

5、简单运算

>>> a = np.random.randint(0,10,(3,3))
>>> a
array([[6, 4, 5],
       [1, 9, 0],
       [8, 2, 4]])
>>> a+10
array([[16, 14, 15],
       [11, 19, 10],
       [18, 12, 14]])
>>> a-10
array([[ -4,  -6,  -5],
       [ -9,  -1, -10],
       [ -2,  -8,  -6]])
>>> a * 10
array([[60, 40, 50],
       [10, 90,  0],
       [80, 20, 40]])

#求和
>>> np.sum(a)
39
>>> np.sum(a,axis=1)
array([15, 10, 14])
>>> np.sum(a,axis=0)
array([15, 15,  9])

#排序
>>> a
array([[6, 4, 5],
       [1, 9, 0],
       [8, 2, 4]])
>>> np.sort(a,axis=0)
array([[1, 2, 0],
       [6, 4, 4],
       [8, 9, 5]])
>>> a.sort(axis=1)
>>> a
array([[4, 5, 6],
       [0, 1, 9],
       [2, 4, 8]])

notebook使用小技巧
%timeit 代码;此方法来判断程序的执行效率

n = np.random.rand(10000)
%timeit sum(n)
1.18 ms ± 2.36 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit np.sum(n)
6.33 µs ± 252 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
#ms 毫秒 µs 微秒 ns 纳秒    1毫秒 = 1,000 微秒   1微秒 = 1,000 纳秒

6、相关函数,备查

Numpy 数据类型对应的取值范围

参考链接

数据类型 描述
bool_ 存储为一个字节的布尔值(真或假)
int_ 默认整数,相当于 C 的long,通常为int32或int64
intc 相当于 C 的int,通常为int32或int64
intp 用于索引的整数,相当于 C 的size_t,通常为int32或int64
int8 字节(-128 ~ 127)
int16 16 位整数(-32768 ~ 32767)
int32 32 位整数(-2147483648 ~ 2147483647)
int64 64 位整数(-9223372036854775808 ~ 9223372036854775807)
uint8 8 位无符号整数(0 ~ 255)
uint16 16 位无符号整数(0 ~ 65535)
uint32 32 位无符号整数(0 ~ 4294967295)
uint64 64 位无符号整数(0 ~ 18446744073709551615)
float_ float64的简写
float16 半精度浮点:符号位,5 位指数,10 位尾数
float32 单精度浮点:符号位,8 位指数,23 位尾数
float64 双精度浮点:符号位,11 位指数,52 位尾数
complex_ complex128的简写
complex64 复数,由两个 32 位浮点表示(实部和虚部)
complex128 复数,由两个 64 位浮点表示(实部和虚部)

NumPy - 算数函数,NumPy 包含大量的各种数学运算功能。

函数名 描述
sin 正弦
cos 余弦
tan 正切
arcsin 反正弦
arccos 反余弦
arctan 反正切
around 返回四舍五入到所需精度的值
floor 返回不大于输入参数的最大整数,向下取整
ceil 函数返回输入值的上限,向上取整
reciprocal 返回参数逐元素的倒数
power 将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂
mod 返回输入数组中相应元素的除法余数

Numpy字符串函数

函数名 描述
add() 返回两个str或Unicode数组的逐个字符串连接
multiply() 返回按元素多重连接后的字符串
center() 返回给定字符串的副本,其中元素位于特定字符串的中央
capitalize() 返回给定字符串的副本,其中只有第一个字符串大写
title() 返回字符串或 Unicode 的按元素标题转换版本
lower() 返回一个数组,其元素转换为小写
upper() 返回一个数组,其元素转换为大写
split() 返回字符串中的单词列表,并使用分隔符来分割
splitlines() 返回元素中的行列表,以换行符分割
strip() 返回数组副本,其中元素移除了开头或者结尾处的特定字符
join() 返回一个字符串,它是序列中字符串的连接
replace() 返回字符串的副本,其中所有子字符串的出现位置都被新字符串取代
decode() 按元素调用str.decode
encode() 按元素调用str.encode

NumPy - 统计函数

函数名 描述
amin 从给定数组中的元素沿指定轴返回最小值
amax 从给定数组中的元素沿指定轴返回最大值
ptp 返回沿轴的值的范围(最大值 - 最小值)
percentile 百分位数是统计中使用的度量,表示小于这个值的观察值的百分比
median 中值定义为将数据样本的上半部分与下半部分分开的值
mean 算术平均值是沿轴的元素的总和除以元素的数量。 如果提供了轴,则沿其计算。
average 加权平均值是由每个分量乘以反映其重要性的因子得到的平均值。
std 标准差是与均值的偏差的平方的平均值的平方根。 标准差公式如下:std = sqrt(mean((x - x.mean())**2))
var 方差是偏差的平方的平均值,即mean((x - x.mean())** 2)。 换句话说,标准差是方差的平方根。

NumPy - 排序、搜索和计数函数

函数名 描述
sort 返回输入数组的排序副本
argsort 对输入数组沿给定轴执行间接排序,并使用指定排序类型返回数据的索引数组。
lexsort 函数使用键序列执行间接排序。 键可以看作是电子表格中的一列。 该函数返回一个索引数组,使用它可以获得排序数据
argmax 分别沿给定轴返回最大元素的索引
argmin 分别沿给定轴返回最小元素的索引
nonzero 返回输入数组中非零元素的索引
where 返回输入数组中满足给定条件的元素的索引
extract 返回满足任何条件的元素

NumPy 包含numpy.linalg模块,提供线性代数所需的所有功能。

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

推荐阅读更多精彩内容