Numpy库入门
导入numpy
import numpy as np
上述写法是导入numpy的惯例写法
array的一些重要属性
a = np.array([[0, 1, 2, 3, 4], [9, 8, 7, 6, 5]])
a.dim
2
a.dim表示a的维度个数,显然a是个二维的
a.shape
(2, 5)
a.shape表示a的维度信息,(2, 5)表示的是a是2 x 5 的从外到里
a.size
10
a.size表示a的元素个数
a.dtype
dtype('int32')
a.dtype表示的是a的元素类型
a.itemsize
4
a.itemsize表示的是a的单个元素所占的字节数
创建array的方法
通过列表创建
x = np.array([0, 1, 2, 3])
x
array([0, 1, 2, 3])
通过元组创建
x = np.array((4, 5, 6, 7))
通过列表和元组的混合类型创建
x = np.array([[1, 2], [9, 8], (0.1, 0.2)])
print(x)
[[1. 2. ] [9. 8. ] [0.1 0.2]]
array的一些常用的函数
arange 生成序列
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
ones 生成指定维度,值全为1的array
np.ones((3, 6))
array([[1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.]])
ones默认创建的数据类型为浮点类型
zeros 生成指定维度,值全为0的array
np.zeros((3, 6), dtype=np.int32)
array([[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]])
可以通过参数dtype来指定生成数据类型
eye 生成n阶单位矩阵
np.eye(5)
array([[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.], [0., 0., 1., 0., 0.], [0., 0., 0., 1., 0.], [0., 0., 0., 0., 1.]])
linspace 创建从指定数据开始到指定数据结束的含有指定个数的array
a = np.linspace(1, 10, 4) # 创建从1开始到10等差的含有4个元素的array 默认数据累心为np.float
a
array([ 1., 4., 7., 10.])
其中参数endpoint=True, 表示生成的array中包含终点数据,若endpoint=False表示终点数据不在生成的array中
b = np.linspace(1, 10, 4, endpoint=False) # 创建从1开始到10含有4个元素的(不包括10) 的array
b
array([1. , 3.25, 5.5 , 7.75])
concatenate 将两个或者若干个元素合并起来
c = np.concatenate((a, b))
c
array([ 1. , 4. , 7. , 10. , 1. , 3.25, 5.5 , 7.75])
reshape 修改array数组的维度
a = np.ones((2, 3, 4), dtype=np.int32)
a.reshape((3,8))
array([[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1]])
值得一提的是reshape函数并不会改变原array,而是形成一个新array
a
array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]])
在运行完a.reshape后,a的维度没有发生改变
resize 而相反地,resize函数同为修改array维度的函数却会改变原array
a.reshape((3,8))
a
array([[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1]])
flatten 把array降为一维 不修改原数组
a.flatten()
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
a
array([[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1]])
astype 构造指定类型,维度和值等和本array一样的array
a = np.ones((2, 3, 4), dtype=np.int)
a
array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]])
b = a.astype(np.float)
b
array([[[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]], [[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]])
full 生成一个指定维度,元素全为指定的值的array
a = np.full((2, 3, 4), 25, dtype=np.int)
a
array([[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]], [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]])
tolist 将array转化成列表
a.tolist()
[[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]], [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]
对array元素的操作
a = np.array([9, 8, 7, 6, 5])
a[2]
7
a[1:4:2] # 对array做切片操作,得到的仍然是array
array([8, 6])
当array的维度不是一维时
a = np.arange(24).reshape((2, 3, 4))
a
array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])
每个维度的索引之间用逗号隔开,维度从外到里
a[1, 2, 3]
23
a[0, 1, 2]
6
a[-1,-2,-3]
17
a[:, 1, -3]
array([ 5, 17])
array的数学运算函数
a = np.arange(24).reshape((2, 3, 4))
a
array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])
mean 求array的算术平均数
11.5
square 求array每一个元素的平方
np.square(a)
array([[[ 0, 1, 4, 9], [ 16, 25, 36, 49], [ 64, 81, 100, 121]], [[144, 169, 196, 225], [256, 289, 324, 361], [400, 441, 484, 529]]], dtype=int32)
sqrt 求array每一个元素的开方
a = np.sqrt(a)
a
array([[[0. , 1. , 1.41421356, 1.73205081], [2. , 2.23606798, 2.44948974, 2.64575131], [2.82842712, 3. , 3.16227766, 3.31662479]], [[3.46410162, 3.60555128, 3.74165739, 3.87298335], [4. , 4.12310563, 4.24264069, 4.35889894], [4.47213595, 4.58257569, 4.69041576, 4.79583152]]])
modf 将array的整数部分和小数部分分离
np.modf(a)
(array([[[0. , 0. , 0.41421356, 0.73205081], [0. , 0.23606798, 0.44948974, 0.64575131], [0.82842712, 0. , 0.16227766, 0.31662479]], [[0.46410162, 0.60555128, 0.74165739, 0.87298335], [0. , 0.12310563, 0.24264069, 0.35889894], [0.47213595, 0.58257569, 0.69041576, 0.79583152]]]), array([[[0., 1., 1., 1.], [2., 2., 2., 2.], [2., 3., 3., 3.]], [[3., 3., 3., 3.], [4., 4., 4., 4.], [4., 4., 4., 4.]]]))