1、Numpy介绍
NumPy是Python语言的一个扩充程序库。支持高阶大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,其运行效率几乎都可以与编译过的等效C语言代码一样快。
2、创建数组
数组和列表的区别,列表可以存储任一类型的数据,而数组只能存储一种类型的数据
>>> import numpy as np
>>> x = np.array([1,2,3])
>>> x
array([1, 2, 3])
>>> type(x)
#生成一维数组,默认值为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 |
寻找矩阵的乘法逆矩阵 |