> 文档中心 > 【机器学习】Numpy入门

【机器学习】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的列表索引基本相似。

二维数组的使用如下:

  1. a[1,1]与a[1][1]等价。
  2. 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]])]

八、其他说明

本篇文章为初学,如有问题可以提出,请您指正,谢谢观看。