Numpy学习笔记(一)
2017-04-15 15:10
429 查看
先决条件
熟悉python,可以参考Python Tutorial或者廖雪峰的官方网站安装Python和Numpy
建议安装ipython或bpython(推荐),一个强化版本的Python Shell,学习时非常方便.
后续的代码均在python3中测试通过。
基础篇
Numpy的主要对象是同种元素的多维数组,这和Python的列表稍微不同,Python列表的元素类型可以不同。在Numpy中,维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank),比如:[1, 2, 3]是一个秩为1 的数组,轴长度为3;
[[1., 0., 0.], [0., 1., 2.]]
数组的秩为2,第一维的维度为2,第二维维度为3.
常用属性
Numpy的数组类被称作ndarray,常称为数组,ndarray的一些常用属性有:ndarray.ndim
返回数组的秩,即数组轴的个数。
ndarray.shape
返回一个元组,该元组包含数组的维度,指示数组在每一维上的维度大小。
ndarray.size
返回数组中的元素个数,等于shape属性返回的元祖中元素的乘积。
ndarray.dtype
返回数组中元素的类型。
ndarray.itemsize
返回数组每个元素的字节大小
通常我们在程序中导入numpy包的方法如下:
import numpy as np
后续例子都默认使用以上语句导入了numpy。
例子
>>> import numpy as np >>> a = np.arange(15).reshape(3, 5) >>> a array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) >>> a.shape (3, 5) >>> a.ndim 2 >>> a.dtype dtype('int64') >> a.dtype.name 'int64' >>> a.itemsize 8 >>> a.size 15 >>> type(a) <class 'numpy.ndarray'> >>> b = np.array([1, 2, 3]) >>> b array([1, 2, 3]) >>> type(b) <class 'numpy.ndarray'>
以上例子中的arange(), reshape(), array()函数将在后续进行讲解,请按照以上代码进行测试。
创建数组
使用np.array()函数来利用常规的Python列表和元组创建数组,数组元素类型根据原序列的元素来推导>>> a = np.array([2, 3, 4]) >>> a array([2, 3, 4]) >>> a.dtype dtype('int64') >>> b = np.array([1.1, 1.2, 1.3]) >>> b.dtype dtype('float64') >>> c = np.array([[1, 2, 3], [4, 5, 6]])# 创建二维数组 >>> c array([[1, 2, 3], [4, 5, 6]]) >>> c.dtype dtype('int64') >>> d = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32) # 为数组指定元素类型 >>> d array([[ 1., 2., 3.], [ 4., 5., 6.]], dtype=float32) >>> d.dtype dtype('float32')
numpy中有一些方便的创建常见数组的函数,比如np.ones()创建全为1的数组,npp.zeros创建全为0的数组,np.empty()创建内容随机。这些函数创建的数组元素类型默认为np.float64
>>> np.zeros((3, 4)) array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]]) >>> np.ones((2, 3, 4), dtype=np.float32) array([[[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]], [[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]]], dtype=float32) >>> np.empty((2, 3)) array([[ 0.00000000e+000, 4.94065646e-324, 9.88131292e-324], [ 1.48219694e-323, 1.97626258e-323, 2.47032823e-323]])
注意:使用这几个函数创建数组时,需指定数组形状,一元祖形式作为参数,而不是每一个维度单独作为参数,例如,创建一个2 × 3的数组,np.zeros((2, 3)).
numpy中有一个类似 python 中range() 的函数,np.arange(),作用和用法和range()一样,区别是返回一个数组,而不是列表
>>> np.arange(0, 10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.arange(0, 10, 2) array([0, 2, 4, 6, 8])
np.linspace(start, end, num),将一个区间进行平分,结束节点end将包括在内, 这和np.arange()有点不同, 默认平分为50个数:
>>> np.linspace(0, 10, 10) array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444, 5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ]) >>> np.linspace(0, 9, 10) array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
基本运算
numpy支持所有的算术运算,但都是按元素进行的(elementwise):>>> a = np.array([1, 2, 3, 4]) >>> b = np.array([5, 6, 7, 8]) >>> c = b - a >>> c array([4, 4, 4, 4]) >>> a ** 2 array([ 1, 4, 9, 16]) >>> np.sin(a) array([ 0.84147098, 0.90929743, 0.14112001, -0.7568025 ]) >>> a < 3 array([ True, True, False, False], dtype=bool)
矩阵的乘法,使用np.dot()来实现
>>> A = np.array([[1, 1], [1, 0]]) >>> B = np.array([[1 ,0], [0, 1]]) >>> np.dot(A, B) array([[1, 1], [1, 0]]) >>> A * B array([[1, 0], [0, 0]])
sum(), max(), min()函数返回数组元素的和、最大值、最小值,同时可以指定在哪一个axis进行运算
>>> a = np.arange(0,6).reshape(2,3) >>> a array([[0, 1, 2], [3, 4, 5]]) >>> a.sum() 15 >>> a.sum(axis=0) # 在第一个axis上进行运算,在这里是列 array([3, 5, 7]) >>> a.sum(axis=1) # 在第二个axis上,即行 array([ 3, 12]) >>> a.max() 5 >>> a.max(axis=0) array([3, 4, 5]) >>> a.max(axis=1) array([2, 5]) >>> a.min() 0 >>> a.min(axis=0) array([0, 1 b54a , 2]) >>> a.min(axis=1) array([0, 3]) >>>
还有一些比如np.sin(), np.cos(),np.exp()等一些通用函数可进行复杂数学运算。
相关文章推荐
- Numpy学习笔记(1)
- NumPy学习笔记(1)--NumPy库简介
- numpy学习笔记
- [新手-数据分析师]numpy学习笔记(1st)
- NumPy学习笔记(2)--Array数组和矩阵基本运算
- Numpy学习笔记
- NumPy学习笔记(1)
- [新手-数据分析师]numpy学习笔记(2nd)
- NumPy学习笔记(3)--排序与索引
- NumPy学习笔记(2)--Array数组和矩阵基本运算
- NumPy学习笔记
- NumPy学习笔记
- Numpy学习笔记(一)
- NumPy学习笔记
- NumPy学习笔记(一)
- [新手-数据分析师]numpy学习笔记(4th)
- Numpy学习笔记(一)
- Numpy学习笔记(二)
- numpy学习笔记
- [新手-数据分析师]numpy学习笔记(3rd)