numpy 基本使用

前言

Numpy是python中的科学计算工具包,提供了一个多维数组对象,用于多维数组或者矩阵的快速运算,包括线性代数基本运算,快速傅里叶变换,基本统计运算随机模拟等。在机器学习中涉及到大量的矩阵知识,熟练使用numpy包有利于快速理解并实现机器学习中的相关算法。Numpy有以下特性:

  • numpy创建的多维数组(narray)拥有固定的大小,不像python中的列表(list),是可以动态增加的。改变numpy创建的多维数组的大小,会删除原来的多维数组,并创建一个新的数组。
  • numpy创建的数组所有元素的类型必须是保持一致,并且在内存中拥有同样的大小。当numpy中的元素是对象时,可以拥有不同的大小和。

numpy包的安装

numpy包的安装可以直接使用以下命令:

pip install numpy

numpy的基本使用

  • 用numpy创建数组
    创建一个一维数组,如下代码所示,
import numpy as np
data = np.array([1,2,3])

其结果如下所示:


一维数组

与一维数组的创建类似,多维数组的创建如下所示:


data = np.array([[1,2,3],[4,5,6]])

其结果如下所示:


多维数组

使用numpy可以将一维数组转换为指定形状的多维数组,如下所示,将拥有24个元素的一维数组转换为2*3*4的3维数组:

data = np.arange(24).reshape(2,3,4)
print(data)

除了常规的矩阵创建,在一些算法中,用到了大量的特殊矩阵,比如,单位矩阵,零矩阵等。单位矩阵的创建如下所示,其中,参数k代表除了第k条对角线的元素为1之外,其他全为0:

data_0 = np.eye(3)
data_1 = np.eye(3,k=1)
单位矩阵

除了单位矩阵外,numpy也提供了一些特殊的方法用以创建一些特殊矩阵,如下所示:


  • 查看多维数组的基本属性
    numpy提供了大量方法用来查看创建的多维数组的基本属性,如下所示:
  1. 查看多维数组的维数


  1. 查看多维数组的形状,如下所示:


  2. 查看多维数组的大小,即返回多维数组所有元素的个数


  3. 查看多维数组的类型,返回数组中元素的类型,在创建数组是可以用特定参数指定元素的类型, 可以使用标准Python类型创建或指定dtype。 此外,numpy还提供自己的类型。 numpy.int32,numpy.int16和numpy.float64就是一些基本例子。


  • 多维数组的一些基本形状操作
    numpy提供了丰富的方法用来改变多维数组的形状,平时主要用到以下几种,如下所示:
  1. 将多维数组转换为一维数组,numpy提供了ravel()方法将多维数组可以转换为一维数组,如下所示:


  2. 在矩阵的运算中涉及到大量的转置运算,numpy提供了两种方法可以实现矩阵的转置操作,一种是narray.transpose() ,如下所示



    而另一种是narray.T,两种方法都具有同样的效果

  3. numpy也提供了一些方法用以实现多维数组的合并,按照其合并形式可以分为按行合并与按列合并,使用以下方法可以实现按行合并,



    同理,按行合并可以用以下方法实现:


  4. numpy除了提供了矩阵的合并方法外,还提供了用于将大矩阵分割为小矩阵的方法,与矩阵合并类似,矩阵分割也分为按行分割和按列分割。如下所示,分别表示按列分割和按行分割:


  • 多维数组的排序相关操作
    numpy也为多维数组的排序操作提供了相关方法,除了基本的排序操作,也提供求矩阵最大最小元素的相关方法,如下所示:
  1. 求多维数组的最大值(最小值)
    numpy提供了一下方法用以求多维数组最大(或最小值的)的下标,如下所示,参数axis=0,表示求每一列最大值的下标,axis=1表示每一行最大值的下标,有axis参数时,返回值构成一个新的数组,而没有axis参数的默认情况下,argmax()将多维数组看成是一维数组,返回值是最大值在在一维数组中的下标。

如果,不想将多维数组看成是一维数组处理,可以用以下方法获得多维数组的下标,如下所示:


多维数组最小值的处理方法与最大值基本相同,在此,不再多做介绍。获得多维数组的最大或者最小值,可以直接使用max()或者min()方法。

  1. numpy的排序操作
    numpy提供了一些用来给多维数组排序的操作,与求取最大最小值的方法类似,有返回数组元素和数组下标的两种方法,分别是sort()argsort()方法,与max()argmax()使用方法基本相同,在此也不多做介绍,值得注意的是,argsort()方法仍然是将多维数组按照一维数组处理的,要返回多维数组的下标,可以使用unravel_index()方法。
  • numpy的基本统计运算
    numpy提供了大量的方法用于基本的统计运算,而这些方法对于机器学习相关算法的理解和运行至关重要,numpy在统计学中的运用主要有以下几种:
  1. 协方差
    协方差表示两个变量一起变化的水平,如果我们检查N维样本,X = [x_1,x_2,... x_N] ^ T,则协方差矩阵元素C_ {ij}是x_i和x_j的协方差。 元素C_ {ii}是x_i的方差,numpy中使用cov()计算矩阵的协方差,其基本使用方法如下所示,通过计算结果,可以清楚看到,x第一行与第二行变化的快慢
  1. 均值计算
    numpy提供了一个mean()方法用来计算矩阵的均值,此外,参数axis=0代表按列求取均值,axis=1表示按行求取均值,基本使用方法如下所示:

  2. 计算矩阵的标准差
    numpy提供了std()方法用来计算矩阵标准差,与求矩阵均值类似,axis=0代表按列求取,而axis=1代表按行求取,具体使用方法,如下所示:

  3. 计算矩阵方差
    numpy提供var()方法用来计算矩阵方差,使用方法与标准差基本一样,在此不再多做介绍。

  • numpy中的基本线性代数运算
    矩阵在线性代数中的运用非常重要,numpy作为python中的多维数组库,提供了大量方法处理线性代数相关运算。
  1. 计算两个向量(数组)的叉积
    两个向量的的叉积常用cross()方法用来计算,其基本使用方法如下所示:

  2. 计算两个矩阵的点积,矩阵的点积计算相当于矩阵乘法,需要注意的是,矩阵点积计算必须遵循矩阵乘法运算原则。除此之外,复数的乘法可以使用点积进行计算,如下所示:


  3. 如下所示,可以通过outer()方法计算两个向量的外积

总结

通过以上介绍,大体了解了numpy的一些常用方法。当然,对numpy熟练使用需要更多的实践和练习,对numpy更高级的方法的使用和理解需要更为深厚的数学基础,尤其是要对线性代数和统计学的知识有更多地理解。对numpy库的更多了解可以参考numpy文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容

  • 前言 numpy是支持 Python语言的数值计算扩充库,其拥有强大的高维度数组处理与矩阵运算能力。除此之外,nu...
    TensorFlow开发者阅读 3,210评论 0 35
  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,122评论 0 18
  • numpy.random.randint Return random integers fromlow(inclu...
    onepedalo阅读 1,178评论 0 1
  • 介绍 NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和...
    喔蕾喔蕾喔蕾蕾蕾阅读 1,771评论 0 5
  • 为什么是 NumPy? 数据分析的基础是数据,原始数据应该在计算机中会以某种数据结构进行存储,后续的分析操作都是在...
    Clemente阅读 626评论 0 2