您的位置:首页 > 编程语言 > Python开发

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