机器学习入门(三)

python关于向量

  python中的List 的特点:不限制其中每一个元素的类型,可以使用下标访问,但是比较慢.

  也可以使用array.

  需要import arrary 这个包.

import array
arr=array.array('i',[i for i in range(10)])
arr
输出:array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

array创建之后其中只能有一种类型,这样array的效率会高一点,但是没有那么灵活.

如果你具体使用过这个array,也会感觉到有很多不方便的地方.,这个时候我们就会使用numpy.


numpy的使用.

  引入numpy的这个包:import numpy

  查看numpy的版本:numpy.version

  使用别名:import numpy as np ,这个时候可以用np来代替numpy.

  这个里有个坑点:import numpy as np要在import numpy 之后运行,会出错.

  numpy的操作和python 的array基本上一样.也是可以下标访问,且不支持修改类型.

  dtype方法可以返回array中的类型.

  虽然numpy的array只允许有一种类型,不能修改类型,但是array里面的元素在赋值的时候会有类型的隐式转换,比如小数种截位.

numpy其他创建numpy.array的方法

zeros(shape) 创建一个全零矩阵 shape可以传入一个元组的类型.

np.zeros(shape=(3,5))
输出:array([[0., 0., 0., 0., 0.],
     [0., 0., 0., 0., 0.],
     [0., 0., 0., 0., 0.]])

可以看到全部都是浮点型,numpy默认都是使用浮点型船舰矩阵,当然我们也可以指定它的类型.

np.zeros(10,dtype=int)
输出:array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

同样的也可以创建全是1矩阵

np.ones(3,5)
输出:
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

如果创建指定值的可以使用np.full(shape,fill_value)

np.fill(shape=(3,5),fill_value=5)
输出:array([[5, 5, 5, 5, 5],
[5, 5, 5, 5, 5],
[5, 5, 5, 5, 5]])

如果具体写出了参数名称,那么参数顺序可以不按照定义顺序.

arange的使用,在numpy中的类似range生成表达式

比如python中这样的表达式

[i for i in range(0,20,2)]
输出:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

在numpy中可以这样写

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

range(0,20,2)的意思是:从0开始,到20之前,不包含20,步长为2的遍历.
和range不同的是 arange可以传入浮点型.

np.arange(0,1,0.2)
输出:array([0. , 0.2, 0.4, 0.6, 0.8])

如果不填写步长,那么步长就会默认是1,如果不填写其实位置,那么默认起始位置是0,这两点和range都一样.

linspace分割区间,numpy中特有的.

先看代码:

np.linspace(0,20,10)
输出:array([ 0.        ,  2.22222222,  4.44444444,  6.66666667,  8.88888889,
       11.11111111, 13.33333333, 15.55555556, 17.77777778, 20.        ])

含义是从区间[0,20]中登长的截取出10个等间距的点,是包括20的.

numpy中的random

从某个范围生成一个数

np.random.randint(0,10)
输出:8

从某个范围生成一个向量

np.random.randint(0,10,10)
array([2, 3, 0, 8, 3, 7, 2, 4, 7, 2])

需要注意的是randint(,,size)是一个前闭后开的区间,size可以是一个元组.

通过随机种子生成向量:

np.random.seed(233)
np.random.randint(0,10,size=(3,5))

array([[7, 7, 5, 1, 3],
       [5, 1, 3, 4, 7],
       [1, 3, 6, 2, 3]])

可以发现无论生成多少次,生成的矩阵都是一样的.

生成一个浮点数

np.random.random()

生成随机浮点向量

np.random.random(10)

如果需要生成符合正态分布的浮点数,默认均值为0,方差为1的浮点数

np.random.normal()

往normal中的参数可以修改均值和方差,默认是前两个参数,当然传入第三个参数大小;

np.random.normal(0,1,3,5)
array([[-0.10892564,  0.3280622 ,  0.89261728, -0.27398504,  0.8855126 ],
       [ 0.73557401,  1.06942746,  0.20317479, -0.04285664,  0.26786595],
       [ 0.25915147, -1.63612624, -0.01482728, -0.70995326,  0.63002903]])

如果对于某个函数不太熟悉,可以加上?然后回车就可以看到对应的文档.

np.random.normal?
posted @ 2019-12-12 14:29  喵粮le  阅读(176)  评论(0编辑  收藏  举报