Numpy学习笔记(一)

先决条件

  • 熟悉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, 2])
    >>> a.min(axis=1)
    array([0, 3])
    >>> 
    

    还有一些比如np.sin(), np.cos(),np.exp()等一些通用函数可进行复杂数学运算。

你可能感兴趣的:(Numpy)