Numpy学习笔记

1 List、Array、NumPy数值处理方法比较

1.1 List的三个缺点

  • 列表可以是任何对象
  • 列表中所保存的是对象和对象的指针,这种数据结构浪费内存和CPU计算时间

1.2 array模块

  • 直接保存数值
  • 不支持多维
  • 没有各种运算函数,不适合做数值运算

1.3 NumPy优点:ndarray和ufunc

  • ndarray是存储单一数据类型的多维数组
  • ufunc则是能够对数组进行处理的函数

2 创建N维数组

2.1 通过序列创建N维数组

import numpy as np
In [1]:a = np.array([1,2,3,4])
In [2]:a
Out[2]: array([1, 2, 3, 4])

In [4]:b = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
In [5]:b
Out[5]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

2.2 指定查看数据的类型:dtype

In [6]:b.dtype
Out[7]: dtype('int32')

#指定为浮点型
In [8]:b1 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]],dtype=float)
In [9]:b1
Out[9]: 
array([[  1.,   2.,   3.,   4.],
       [  5.,   6.,   7.,   8.],
       [  9.,  10.,  11.,  12.]])

#指定为复数型
In [10]:b2 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]],dtype=complex)
In [11]:b2
Out[11]: 
array([[  1.+0.j,   2.+0.j,   3.+0.j,   4.+0.j],
       [  5.+0.j,   6.+0.j,   7.+0.j,   8.+0.j],
       [  9.+0.j,  10.+0.j,  11.+0.j,  12.+0.j]])

2.3 查看更改指定数组的维度:shape

In [12]:a.shape
Out[12]: (4,)
In [13]:b.shape
Out[13]: (3, 4)

In [14]:a.shape=(2,2)
In [14]:a
Out[15]: 
array([[1, 2],
       [3, 4]])
In [16]:d = b.reshape((4,3))
In [16]:d
Out[17]: 
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

3 Numpy中常用的专门用来生成数组的函数

  • arange函数类似于python的range函数,通过指定开始值、终值和步长来创建一维数组
In [18]:np.arange(0,1,0.1)
Out[18]: array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])
  • linspace函数通过指定开始值、终值和元素个数来创建一维数组
In [19]:np.linspace(0,1,5)
Out[19]: array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ])
  • logspace函数和linspace类似,函数通过指定开始值、终值和元素个数,创建等比数列创建一维数组
In [20]:np.logspace(0,1,10)
Out[20]: array([  1.        ,   1.29154967,   1.66810054,   2.15443469,
         2.7825594 ,   3.59381366,   4.64158883,   5.9948425 ,
         7.74263683,  10.        ])

4 数据的存取(切片提取子集)

In [21]:a = np.arange(10)
In [21]:a
Out[22]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 用整数作为下标可以获取数组中的某个元素
In [23]:a[8]
Out[23]: 8

# 用范围作为下标获取数组的一个切片,包括a[3]不包括a[5]
In [24]:a[2:6]
Out[24]: array([2, 3, 4, 5])

# 省略开始下标,表示从a[0]开始
In [25]:a[:7]
Out[25]: array([0, 1, 2, 3, 4, 5, 6])

# 下标可以使用负数,表示从数组后往前数
In [26]:a[:-1]
Out[26]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])

# 下标用来修改元素的值
In [27]:a[2:4] = 100,101
In [27]: a
Out[28]: array([  0,   1, 100, 101,   4,   5,   6,   7,   8,   9])

# 范围中的第三个参数表示步长,2表示隔一个元素取一个元素
In [29]:a[1:-1:2] 
Out[29]: array([  1, 101,   5,   7])

# 省略范围的开始下标和结束下标,步长为-1,整个数组头尾颠倒
In [30]:a[::-1]
Out[30]: array([  0,   1, 100, 101,   4,   5,   6,   7,   8,   9])

# 步长为负数时,开始下标必须大于结束下标
In [31]:a[5:1:-2] 
Out[31]: array([  5, 101])

- 和Python的列表序列不同,通过下标范围获取的新的数组是原始数组的一个视图。它与原始数组共享同一块数据空间
# 通过下标范围产生一个新的数组b,b和a共享同一块数据空间
In [32]:b = a[3:7]
Out[32]: array([101,   4,   5,   6])

# 将b的第2个元素修改为-10
In [33]:b[2] = -10
Out[33]: array([101,   4, -10,   6])

# a的第5个元素也被修改为10
In [34]:a
Out[34]: array([  0,   1, 100, 101,   4, -10,   6,   7,   8,   9])

- 使用序列(可以是列表或者数组提取子集)。使用整数序列作为下标获得的数组不和原始数组共享数据空间

# 获取a中的下标为1, 1, 3, 8的4个元素,组成一个新的数组
In [35]:a[[1,1,3,8]]
Out[35]: array([  1,   1, 101,   8])

#下标可以是负数
In [36]:b = a[np.array([1,1,-1,8])] 
Out[36]: array([1, 1, 9, 8]) 

# 使用布尔数组
In [37]:a[np.array([True, False, True, True])]
Out[37]: array([  0, 100, 101])

5 多维数组

In [38]:c = np.arange(0, 60, 10).reshape(-1, 1) + np.arange(0, 6)
Out[38]:c 
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])


In [39]:c[0,3:5]
Out[39]: array([3, 4])

In [40]:c[4:,4:]
Out[40]:
array([[44, 45],
       [54, 55]])

In [41]:c[:,2]
Out[41]:
array([ 2, 12, 22, 32, 42, 52])

In [42]:c[2::2,::2]
Out[42]:
array([[20, 22, 24],
       [40, 42, 44]])
# 使用序列和布尔提取


In [43]:c[(0,1,2,3,4),(1,2,3,4,5)]
Out[43]: array([ 1, 12, 23, 34, 45])

In [44]:c[3:,(0,2,5)]
Out[44]: 
array([[30, 32, 35],
       [40, 42, 45],
       [50, 52, 55]])

In [45]:mask = np.array([1,0,1,0,0,1],dtype=np.bool)
Out[45]: array([ True, False,  True, False, False,  True], dtype=bool)

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

推荐阅读更多精彩内容