【机器学习】Numpy入门
目录
一、Numpy概述
二、ndarray数组创建
三、数组的索引和切片使用
四、数组形状的转换
五、常用的统计方法
六、数组的去重
七、数组的拆分与合并
八、其他说明
一、Numpy概述
numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
二、ndarray数组创建
ndarry:N维数组,元素数据类型必须相同。
其属性如下:
属性 | 功能 |
dtype | 数组元素的类型 |
ndim | 数组的维度 |
shape | 数组的长度 |
下面是一些创建数组以及打印其属性的函数使用:
# -*- coding: utf-8 -*-import numpy;print '使用列表生成一维数组'data = [1,2,3,4,5,6]x = numpy.array(data)print x #打印数组print x.dtype #打印数组元素的类型print '使用列表生成二维数组'data = [[1,2],[3,4],[5,6]]x = numpy.array(data)print x #打印数组print x.ndim #打印数组的维度print x.shape #打印数组各个维度的长度。shape是一个元组print '使用zero/ones/empty创建数组:根据shape来创建'x = numpy.zeros(6) #创建一维长度为6的,元素都是0一维数组print xx = numpy.zeros((2,3)) #创建一维长度为2,二维长度为3的二维0数组print xx = numpy.ones((2,3)) #创建一维长度为2,二维长度为3的二维1数组print xx = numpy.empty((3,3)) #创建一维长度为2,二维长度为3,未初始化的二维数组print xprint '使用arrange生成连续元素'print numpy.arange(6) # [0,1,2,3,4,5,] 开区间print numpy.arange(0,6,2) # [0, 2,4]
三、数组的索引和切片使用
一维数组的使用与Python的列表索引基本相似。
二维数组的使用如下:
- a[1,1]与a[1][1]等价。
- a[1:2 , 2:4]取得是范围的数据,如果[:]表示在某个维度全取。
import numpy as npif __name__ == '__main__': np2arr = np.arange(24).reshape(4, 6) print(np2arr) #取值 np2arr[行,列] #取行 print(np2arr[0,]) # 取第一行 print(np2arr[1, :]) #取列 print(np2arr[:, 0]) #取第一列 #取多行 print(np2arr[[1, 2, 3],]) # # 取多列 print(np2arr[1, [1, 2, 3]]) # print(np2arr[1:3,1:4]) #取的是 矩阵的范围 print(np2arr[[1,2,3], [1,2,3]]) #[ 7 14 21] 取多个值
四、数组形状的转换
import numpy as npif __name__ == '__main__': np_arr = np.array([[1, 2, 3], [4, 5, 6]]) print(np_arr) # sharp print(np_arr.shape) #1.修改 sharp ''' size = sharp[0] * sharp[1] ''' np_arr.shape = (3,2) print("--"*20) print(np_arr) print(np_arr.shape) # 2.修改 sharp np_arr2 = np.reshape(np_arr, (1, 6), order='C') np_arr3 = np.reshape(np_arr, (1, 6), order='F') np_arr4 = np.reshape(np_arr, (1, 6), order='A') print(np_arr2) print("--" * 20) print(np_arr) print("--" * 20) print(np_arr3) print("--" * 20) print(np_arr4) print("**" * 20) # 3.修改 sharp print(np_arr) print("**" * 20) np_arr5 = np_arr.reshape((1, 6)) print(np_arr5) print("**" * 20) print(np_arr) print("**" * 20) # 4.修改 数组维度 print(np_arr) print("**" * 20) #2 -》 3 6 np3_arr = np.reshape(np_arr, (2, 3, 1)) print(np3_arr) print("**" * 20) # 2 ->1 np2_arr = np.reshape(np_arr, (1, 6)) print(np2_arr) print(np2_arr.ndim) print("**" * 20) np1_arr = np.reshape(np_arr, (6,)) print(np1_arr) print(np1_arr.ndim)
五、常用的统计方法
方法 | 说明 |
sum | 对数组的全部或某轴向进行求和。 |
mean | 算数平均数,零长度的数组的mean为NAN。 |
min | 最小值 |
max | 最大值 |
std | 标准差 |
var | 方差 |
import numpy as npif __name__ == '__main__': data = np.random.randint(1, 9, 20).reshape(4,5) print(data) # # #1. rand (0,1)均匀分布 # d1 = np.random.rand(10) # print(d1) # # #2 正态分布 # d2 = np.random.randn(100) # print(d2) # # #3.choice # d3 = np.array([1, 2, 3, 4]) # d4 = np.random.choice(d3, (4, 4), p=[0.1, 0, 0.6, 0.3]) # print(d4) #基本的函数 print(np.sum(data)) print(np.mean(data)) print(np.min(data)) print(np.max(data)) # 方差 标准差 data2 = np.array([8,2, 3,4,7,6]) print(data2.var()) print(data2.std()) print(np.var(data2)) print(np.std(data2)) #有偏估计 无偏估计 【数量少】 print(np.var(data2,ddof=1)) print(np.std(data2,ddof=1))
六、数组的去重
print 'ndarray的唯一化'x = numpy.array([[1,4,2],[6,1,3],[1,5,2]])print numpy.unique(x) # [1,2,3,4,5,6]
七、数组的拆分与合并
方法 | 说明 |
concatenate | 沿着一条轴进行连接 |
vstack | 面向行的方式对数组进行堆叠 |
hstack | 面向列的方式对数组进行堆叠 |
split | 通过定义axis的值为1或0,进行按行或按列进行分割 |
vsplit | 面向行的方式对数组进行分割 |
hsplit | 面向列的方式对数组进行分割 |
组合的使用:
x = numpy.array([[1, 2, 3], [4, 5, 6]])y = numpy.array([[2,4,6], [8, 10, 12]])print numpy.concatenate([x, y], axis = 0) # 纵向组合 [[ 1 2 3][ 4 5 6][ 2 4 6][8 10 12]]print numpy.concatenate([x, y], axis = 1) # 横向组合 [[ 1 2 3 2 4 6][ 4 5 6 8 10 12]]print numpy.vstack((x, y)) # 垂直堆叠:相对于垂直组合print numpy.hstack((x, y)) # 水平堆叠:相对于水平组合
合并与分割
x = numpy.array([[1, 2, 3], [4, 5, 6]])print numpy.split(x,2,axis=0) # 按行分割2次 [array([[1, 2, 3]]), array([[4, 5, 6]])]print numpy.split(x,3,axis=1) # 按列分割3次 [array([[1],[4]]), array([[2],[5]]), array([[3],[6]])]
八、其他说明
本篇文章为初学,如有问题可以提出,请您指正,谢谢观看。