赞
踩
目录
numpy的基本对象为ndarray,即n-dimensional array object,它是存储单一数据类型的多维数组
- a = np.array([[1,2,3,4],[5,6,7,8]])
-
- b = np.array(list((1,2,3,4,5,6,7,8,9)))
- # 创建2行3列的全一矩阵
- c = np.ones((2,3))
-
- # 创建2行3列的全0矩阵
- d = np.zeros((2,3))
-
- # 创建4行4列的单位矩阵
- e = np.eye(4)
还有产生随机数的一系列方法都在np.random里面
- # 类似于list,起始位置为1,结束位置为10,步长为2
- f = np.arange(1,10,2)
-
- # 起始位置为1,结束位置为10,创建20个数据,数据是等差数列
- g = np.linspace(1,10,20)
-
- # 起始位置为1,结束位置为10,创建20个数据,数据为等比数列、
- h = np.logspace(1,10,20)
numpy数组创建的时候,可以通过dtype制定数据类型,numpy常见的数据类型如下:
- # 创建数组的时候制定数据类型为int32
- a = np.eye(5,dtype=np.int32)
-
- # 查看数据类型,结果为dtype('int32')
- a.dtype
-
- # 转化数据类型,转化成np.float32
- a.astype(np.float32)
- # 创建大小为(4,4)的数组
- a = np.eye(4,dtype=np.int32)
-
- # 显示a的shape,为(4,4)
- a.shape
-
- # 将a数组转化成(2,8)列的数组
- a.reshape((2,8))
输出结果为:
切片索引是源数据的视图,对切片进行修改,也会影响到源数据
- a = np.arange(10)
-
- a_slice = a[3:9]
-
- #a_slice输出结果为array([3, 4, 5, 6, 7, 8])
-
- # 将索引的0个元素赋值为12345,则a的相应的值也会发生改变
- a_slice[0] = 12345
-
- # 输出a的值为
- array([ 0, 1, 2, 12345, 4, 5, 6, 7, 8, 9])
更为复杂的切片索引
- arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
-
- # arr2d为
- array([[1, 2, 3],
- [4, 5, 6],
- [7, 8, 9]])
-
- # 取前两行,后两列的数据
- arr2d[:2,1:]
-
- # 取第二列的数据
- arr2d[:,1]
通过布尔值来取相应的数据
- # names为7个人名,分别对应data1的7行
- names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
- data = np.random.randn(7, 4)
-
-
- # data数据如下
- array([[ 0.41913264, -0.60298782, -0.33671674, 0.90943554],
- [-0.80005614, 0.0440845 , -0.39836774, 0.70296011],
- [-0.71155559, -1.55516028, 0.94330681, -1.16287966],
- [ 0.71886886, -0.44805654, 0.20305883, -1.40290861],
- [-0.55253099, 0.40979184, 0.38371407, 0.32289946],
- [ 1.84004387, 0.35889294, 0.20075337, -1.07528119],
- [ 0.35663761, -0.80927168, -1.57235542, -1.26338198]])
-
- # 取Bob所对应的行
- data[names == 'Bob']
-
- 结果:
- array([[ 0.41913264, -0.60298782, -0.33671674, 0.90943554],
- [ 0.71886886, -0.44805654, 0.20305883, -1.40290861]])
利用整数数组来进行取值,想取那行就把那行的索引放在数组里
- arr = np.ones((8, 4))
- for i in range(8):
- arr[i] = i
-
- # arr数据
- array([[0., 0., 0., 0.],
- [1., 1., 1., 1.],
- [2., 2., 2., 2.],
- [3., 3., 3., 3.],
- [4., 4., 4., 4.],
- [5., 5., 5., 5.],
- [6., 6., 6., 6.],
- [7., 7., 7., 7.]])
-
-
- # 现在想取1,3,5,7行
- arr[[1,3,5,7]]
-
- 结果:
- array([[1., 1., 1., 1.],
- [3., 3., 3., 3.],
- [5., 5., 5., 5.],
- [7., 7., 7., 7.]])
- # 通过numpy数组对进行一些统计计算,如:numpy数组求和,求平均等等
-
- # 生成3行2列的随机数组
- arr = np.random.randn(3,2)
-
- array([[-0.17504348, 1.07181866],
- [ 0.98881592, -0.18443573],
- [ 0.07177932, -1.13940987]])
-
- # 对arr数组求均值
- arr.mean()
- 结果:
- 0.10558747189372959
-
- # 对arr数组求和
- arr.sum()
- 结果:
- 0.6335248313623776
-
- # 对arr数组列求和
- arr.sum(axis=0)
- 结果:
- array([ 0.88555177, -0.25202694])
-
- # 对arr数组行求和
- arr.sum(axis=1)
- 结果:
- array([ 0.89677519, 0.80438019, -1.06763054])
- # 对numpy数组进行一些数学运算,例如求指数,求平方
- # 这些在numpy里叫ufunc即 universal function,对数组内每个元素进行操作的函数
-
- arr = np.random.randn(6)
-
- # 对arr求绝对值
- np.abs(arr)
-
- 结果:
- array([1.02469848, 0.84606635, 0.43296449, 0.86053481, 0.10749375, 1.49358338])
-
-
- # 对arr求cos
- np.cos(arr)
-
- 结果:
- array([0.51935658, 0.6629333 , 0.90772595, 0.65203207, 0.99422811, 0.07713625])
- # numpy与其他数组的计算,主要包括加、减、乘、除,求逆等等
-
- # 常用的操作为矩阵相乘
- a = np.array([[1,2],[3,4]])
- b = np.array([[1,1],[2,2]])
-
- a
- array([[1, 2],
- [3, 4]])
-
- b
- array([[1, 1],
- [2, 2]])
-
- # 矩阵相乘为np.dot(),py3.5以后也可以用@
- np.dot(a,b) 或者 a@b
- 结果都一样,如下:
- array([[ 5, 5],
- [11, 11]])
-
-
- # 矩阵对应元素与元素相乘
- np.multiply(a,b)
-
- 结果:
- array([[1, 2],
- [6, 8]])
- # numpy数据的保存
- arr = np.arange(10)
- np.save('test',arr)
-
- # numpy数据的加载
- b = np.load('test.npy')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。