机器学习入门 3-4 创建Numpy数组(和矩阵)

2022-05-25 13:58:09 浏览数 (2)

其它创建 numpy.array 的方法

创建值全为 0 的 ndarray 数组

  • numpy.zeros(shape, dtype) - 创建值为 0,形状为 shape,类型为 dtype 的ndarray 数组
代码语言:javascript复制
In [1]: import numpy as np

In [2]: np.zeros(10)
Out[2]: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

In [3]: np.zeros(10).dtype
Out[3]: dtype('float64')
    
In [4]: np.zeros(10, dtype = int)
Out[4]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
    
In [5]: np.zeros((3, 5))
Out[5]: array([[0., 0., 0., 0., 0.],
               [0., 0., 0., 0., 0.],
               [0., 0., 0., 0., 0.]])
    
In [6]: np.zeros(shape = (3, 5), dtype = int)
Out[6]: array([[0, 0, 0, 0, 0],
               [0, 0, 0, 0, 0],
               [0, 0, 0, 0, 0]])

创建值全为 1 的 ndarray 数组

  • numpy.ones(shape, dtype) - 创建值为 1,形状为 shape,类型为 dtype 的ndarray 数组
代码语言:javascript复制
In [7]: np.ones((3, 5))
Out[7]: array([[1., 1., 1., 1., 1.],
               [1., 1., 1., 1., 1.],
               [1., 1., 1., 1., 1.]])

创建值全为指定值的 ndarray 数组

  • numpy.full(shape, fill_value, dtype = None) - 创建值为 fill_value,形状为 shape 的ndarray 数组
代码语言:javascript复制
In [8]: np.full((3, 5), 666)
Out[8]: array([[666, 666, 666, 666, 666],
               [666, 666, 666, 666, 666],
               [666, 666, 666, 666, 666]])

Notes: zeros 和 ones 函数创建的数组默认为浮点型,而 full 函数 dtype 默认为 None 类型,所以如果在使用 full 不指定 dtype 的情况下,默认为传入 fill_value 值的类型。

arange

  • numpy.arange([start, ]stop, [step, ]dtype=None)

arange 和 python 中内置的 range 函数非常像。

代码语言:javascript复制
In [9]: [i for i in range(0, 20, 2)]
Out[9]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

In [10]: np.arange(0, 20, 2)
Out[10]: array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

不过 arange 函数中的 step 可以为浮点数,而 python 内置的 range 函数则不能。

代码语言:javascript复制
In [11]: [i for i in range(0, 1, 0.2)]
Out[11]: TypeError: 'float' object cannot be interpreted as an integer
        
In [12]: np.arange(0, 1, 0.2)
Out[12]: array([0. , 0.2, 0.4, 0.6, 0.8])

linspace

  • numpy.linspace(start, stop, num=50, endpoint=True, dtype=None) - 从 [start, stop] 的全闭区间中按间隔选出 num 个数值来
代码语言:javascript复制
In [13]: np.linspace(0, 20, 10)
Out[13]: array([ 0.        ,  2.22222222,  4.44444444,  6.66666667,  8.88888889,
       11.11111111, 13.33333333, 15.55555556, 17.77777778, 20.        ])
    
In [14]: np.linspace(0, 20, 11)
Out[14]: array([ 0.,  2.,  4.,  6.,  8., 10., 12., 14., 16., 18., 20.])

Notes: 终止点的值是包含在生成的数组中的。

随机数 random

创建随机整数的 ndarray 数组

  • random.randint(low, high=None, size=None) - 创建形状为 size 的 ndarray 数组,数组的值是从 [low, high) 区间中随机抽取的整数。
代码语言:javascript复制
In [15]: np.random.randint(0, 10)
Out[15]: 7
    
In [16]: np.random.randint(0, 10, 10)
Out[16]: array([2, 5, 2, 4, 1, 2, 2, 8, 7, 7])

有时为了保证机器学习实验的可重复、可复制性,我们需要在训练和调试时生成的随机数是一样的。众所周知,计算机中的随机数都是伪随机数,我们可以通过设置随机种子,来保证前后生成的随机数是一样的。

代码语言:javascript复制
In [17]: np.random.seed(666)

In [18]: np.random.randint(0, 10)
Out[18]: 6
    
In [19]: np.random.randint(0, 10)
Out[19]: 6

创建随机浮点数的 ndarray 数组

  • random.random(size=None) - 创建形状为 size 的 ndarray 数组,数组的值是 0,1之间均匀分布的浮点数
代码语言:javascript复制
In [20]: np.random.random()
Out[20]: 0.7744794542685887
    
In [21]: np.random.random(size = (2, 5))
Out[21]: array([[0.53280254, 0.25913185, 0.58381262, 0.32569065, 0.88889931],
          [0.62640453, 0.81887369, 0.54734542, 0.41671201, 0.74304719]])

创建随机浮点数的 ndarray 数组

  • random.normal(loc=0.0, scale=1.0, size=None) - 创建形状为 size 的 ndarray 数组,数组的值是均值为 loc 方差为 scale 的浮点数
代码语言:javascript复制
In [20]: np.random.normal()
Out[20]: -0.6564722973415308
    
In [20]: np.random.normal(0, 1, (3, 5)) 
Out[20]: array([[-0.02607576, -0.82975832,  0.29655378, -0.3126795 , -0.61130127],
               [-0.8217515 ,  0.8971227 ,  0.13607861, -0.2586548 ,  1.11076564],
               [-0.18842439, -0.04148929, -0.98479191, -1.35228176,  0.19432385]])

查看帮助文档

有两种方式可以在 Jupyter Notebook 中查看模块或函数的帮助文档

  • 在 Jupyter Notebook 外部查看帮助文档
代码语言:javascript复制
np.random.normal? # 查看normal函数的帮助文档
np.random? # 查看random模块的帮助文档
  • 在 Jupyter Notebook 内部查看帮助文档
代码语言:javascript复制
help(np.random.normal)

References:

  1. Python3入门机器学习 经典算法与应用: https://coding.imooc.com/class/chapter/169.html#Anchor

0 人点赞