Numpy学习笔记

作者: 一刀YiDao | 来源:发表于2016-08-02 22:23 被阅读272次

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])

相关文章

网友评论

    本文标题:Numpy学习笔记

    本文链接:https://www.haomeiwen.com/subject/jcyfsttx.html