NumPy学习笔记:1、NumPy数组对象

一、引入Numpy包

>>> import numpy as np

二、可供查阅的NumPy参考文档及帮助

1、网页文档:http://docs.scipy.org/

2、交互式帮助:

注意:在Python3中?方式的帮助无法识别,需要使用help()函数。

>>> import numpy as np
>>> np.array? 
  File "<stdin>", line 1
    np.array?
            ^
SyntaxError: invalid syntax
>>> help(np.array)
Help on built-in function array in module numpy.core.multiarray:

array(...)
    array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)

    Create an array.
    ...

3、模糊查找:

>>> np.lookfor('create array')
Search results for 'create array'
---------------------------------
numpy.array
    Create an array.
numpy.memmap
    Create a memory-map to an array stored in a *binary* file on disk.
numpy.diagflat
    Create a two-dimensional array with the flattened input as a diagonal.
numpy.fromiter
    Create a new 1-dimensional array from an iterable object.
numpy.partition
    Return a partitioned copy of an array.
numpy.ctypeslib.as_array
    Create a numpy array from a ctypes array or a ctypes POINTER.
numpy.ma.diagflat
    Create a two-dimensional array with the flattened input as a diagonal.
numpy.ma.make_mask
    Create a boolean mask from an array.

三、创建Numpy数组

1、一般创建方法

# 创建一维数组
>>> a = np.array([0, 1, 2, 3])
>>> a
array([0, 1, 2, 3])
>>> a.ndim
1
>>> a.shape
(4,)
>>> len(a)
4

# 创建二维及多维数组
>>> b = np.array([[0, 1, 2], [3, 4, 5]])    # 2 x 3 array
>>> b
array([[0, 1, 2],
       [3, 4, 5]])
>>> b.ndim
2
>>> b.shape
(2, 3)
>>> len(b) # returns the size of the first dimension
2
>>> c = np.array([[[1], [2]], [[3], [4]]])
>>> c.shape
(2, 2, 1)
>>> c
array([[[1],
        [2]],

       [[3],
        [4]]])

2、用函数创建数组

(1)序列数组-设置间隔

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = np.arange(1,10,2)  # start, end(exclusive), step
>>> b
array([1, 3, 5, 7, 9])

(2)序列数组-设置数组长度

>>> c = np.linspace(0, 1, 6)   # start, end, num-points
>>> c
array([ 0. ,  0.2,  0.4,  0.6,  0.8,  1. ])
>>> c = np.linspace(0, 1, 6, endpoint=False)
>>> c
array([ 0.        ,  0.16666667,  0.33333333,  0.5       ,  0.66666667,
        0.83333333])

(3)常用数组的创建-一些特殊矩阵

# 全1矩阵
>>> a = np.ones((3,3))
>>> a
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

# 全零矩阵
>>> b = np.zeros((2,2))
>>> b
array([[ 0.,  0.],
       [ 0.,  0.]])

#单位矩阵
>>> c = np.eye(3)
>>> c
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

#对角矩阵
>>> d = np.diag(np.array([1,2,3,4]))
>>> d
array([[1, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 3, 0],
       [0, 0, 0, 4]])

(4)随机数组

>>> a = np.random.rand(4)       # uniform in [0, 1]
>>> a
array([ 0.41122785,  0.67154177,  0.96401834,  0.74550152])
>>> b = np.random.randn(4)       # Gaussian
>>> b
array([ 2.04849267,  0.55180437,  0.85011143,  2.11163848])
>>> np.random.seed(1234)        # Setting the random seed

四、基本数据类型

 不同的数据类型允许我们将数据更紧密地存储在内存中,但是大多数时候,我们都操作的浮点型数据。注意,Numpy可以自动检测输入数据的数据类型。例如:

>>> a = np.array([1, 2, 3])
>>> a.dtype
dtype('int32')
>>> b = np.array([1., 2., 3.])
>>> b.dtype
dtype('float64')

显式声明Numpy数组的数据类型:

>>> c = np.array([1, 2, 3], dtype=float)
>>> c.dtype
dtype('float64')

一般来说,函数创建Numpy数组时,缺省的数据类型是浮点型,例如:

>>> a = np.ones((3,3))
>>> a.dtype
dtype('float64')

其他数据类型Numpy数组的创建:

>>> d = np.array([1+2j, 3+4j, 5+6*1j])  # 复数型
>>> d.dtype
dtype('complex128')
>>> e = np.array([True, False, False, True])   # 布尔型
>>> e.dtype
dtype('bool')
>>> f = np.array(['Bonjour', 'Hello', 'Hallo',])  #字符串型,7表示数组中字符串最多有7个字符
>>> f.dtype 
dtype('<U7') 

五、数据可视化基础

首先,命令行开启IPython或者IPython notebook,之后让交互式绘图可用,%matplotlib(IPython) 或者 %matplotlib inline(IPython notebook)。

Matplotlib是一个二维绘图包,通常采取以下方式导入:

>>> import matplotlib.pyplot as plt
>>> plt.plot(x, y) # 绘制线型图 
>>> plt.show() # 显示所绘制的图形(如果已经开启了交互式绘图,可以不使用show语句) 

1、绘制一维图像

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 3, 20)
y = np.linspace(0, 9, 20)
plt.plot(x, y)       # 绘制线型图
plt.plot(x, y, 'o')  # 绘制散点图
plt.show() 

2、绘制二维图像(例如图片)

import numpy as np
import matplotlib.pyplot as plt

image = np.random.rand(30, 30)
plt.imshow(image, cmap=plt.cm.hot)  # 设置color map
plt.colorbar()  # 设置图像上显示颜色条
plt.show()

六、下标

和其他Python序列相同,Numpy数组中的元素可以通过下标访问和更改,它的下标也是从0开始的。

Python常用的序列反转的方法,Numpy数组也同样适用:

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

多维Numpy数组的访问:

注意,在二维数组中,第一个维度对应的是行,第二个维度对应的是列;而对于更高维度的数组,维度之间的对应关系并不确定。

>>> a = np.diag(np.arange(3))
>>> a
array([[0, 0, 0],
       [0, 1, 0],
       [0, 0, 2]])
>>> a[1, 1] # 第二行,第二列
1
>>> a[2, 1] = 10 # 第三行,第二列
>>> a
array([[ 0,  0,  0],
       [ 0,  1,  0],
       [ 0, 10,  2]])
>>> a[1]
array([0, 1, 0])

七、切片

和其他Python序列相同,Numpy数组也可以进行切片操作。

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[2:9:3]    # [起始下标(包括):终止下标(不包括):步长]
array([2, 5, 8])
>>> a[:4]   # 起始下标默认为0,终止下标默认为n(数组的长度),步长默认为1
array([0, 1, 2, 3])
>>> a[1:3]   # 三个参数并不是必须的
array([1, 2])
>>> a[::2]   
array([0, 2, 4, 6, 8])
>>> a[3:]
array([3, 4, 5, 6, 7, 8, 9])

切片和赋值也可以结合起来:

>>> a = np.arange(10)
>>> a[5:] = 10
>>> a
array([ 0,  1,  2,  3,  4, 10, 10, 10, 10, 10])
>>> b = np.arange(5)
>>> a[5:] = b[::-1]
>>> a
array([0, 1, 2, 3, 4, 4, 3, 2, 1, 0])

 八、副本和视图

切片操作创建了一个原来Numpy数组的视图,是一种直接获取原数组的方式,原数组在内存中并不会重新复制一份。可以使用np.may_share_memory()函数来看两个数组是否共享一块内存。需要注意的是,这个函数是启发式的,所得的结果并不一定完全正确。

当对视图有所更改时,原数组也会发生相应的更改。

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = a[::2]
>>> b
array([0, 2, 4, 6, 8])
>>> np.may_share_memory(a, b)
True
>>> b[0] = 12
>>> b
array([12,  2,  4,  6,  8])
>>> a   # !!!注意
array([12,  1,  2,  3,  4,  5,  6,  7,  8,  9])

>>> a = np.arange(10)
>>> c = a[::2].copy()  # 显式说明生成副本
>>> c[0] = 12
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> np.may_share_memory(a, c)
False

九、花式索引

索引值为一个数组,与切片不同,花式索引会创建一个原数组的副本,而不是一个原数组的视图。

1、使用布尔型数组作为索引:

>>> import numpy as np
>>> np.random.seed(3)
>>> a = np.random.random_integers(0, 20, 15)
>>> a
array([10,  3,  8,  0, 19, 10, 11,  9, 10,  6,  0, 20, 12,  7, 14])
>>> a[a % 3 == 0]
array([ 3,  0,  9,  6,  0, 12])
>>> m = a[a % 3 == 0]
>>> n = a[3:7]
>>> np.may_share_memory(a, m)
False
>>> np.may_share_memory(a, n)
True

这在给数组的某个子数组赋值时很有用:

>>> a[a % 3 == 0] = -1
>>> a
array([10, -1,  8, -1, 19, 10, 11, -1, 10, -1, -1, 20, -1,  7, 14])

2、使用整数型列表作为索引

>>> a = np.arange(0, 100, 10)
>>> a
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
>>> a[[2, 3, 2, 4, 2]]
array([20, 30, 20, 40, 20])
>>> a[[9,7]] = -100
>>> a
array([   0,   10,   20,   30,   40,   50,   60, -100,   80, -100])
>>> b = a[[2, 3, 2, 4, 2]]
>>> np.may_share_memory(a,b)
False

也可使用整数型Numpy数组作为索引,此时得到的数组与作为索引的数组有着同样的shape。

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> idx = np.array([[2,3],[1,5]])
>>> idx.shape
(2, 2)
>>> a[idx]
array([[2, 3],
       [1, 5]])

转载于:https://www.cnblogs.com/steacyMAR/p/7158520.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值