【十二】机器学习之路——numpy库

写在前面:这篇博客内容介绍的比较简单的基本知识,适合python和机器学习零基础的人看,如果读者对numpy比较了解的话,可以pass。

- numpy

  Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,之前提到的梯度下降法每次迭代都需要遍历所有的数据,大大降低的程序的运算速度,如果换成矩阵运算的话将会使效率提升很多,这个时候我们就要使用到numpy的库函数了。numpy里功能较多,这篇博客就简单介绍比较基础基础的知识,
大家可以参考python中numpy入门,学习一下基本的矩阵运算,也可以参考Numpy详细介绍,本篇博客参考的内容都在上面的链接里。

- Array多维数组

  NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(通常是元素是数字)。在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。

  例如,在3D空间一个点的坐标[1, 2, 3]是一个秩为1的数组,因为它只有一个轴。那个轴长度为3.又例如,在以下例子中,数组的秩为2(它有两个维度).第一个维度长度为2,第二个维度长度为3。可以简单理解为两行三列,但这个还不是矩阵,仅为了理解方便。

[[ 1., 0., 0.],
 [ 0., 1., 2.]]

numpy里多维数组类型为numpy.ndarray

使用numpy.array方法
以list或tuple变量为参数产生一维数组:

print np.array([1,2,3,4])
[1 2 3 4]
print np.array((1.2,2,3,4))
[ 1.2  2.   3.   4. ]
print type(np.array((1.2,2,3,4)))
type 'numpy.ndarray'
#以list变量为元素产生二维数组:
print np.array([[1,2],[3,4]])
[[1 2]
 [3 4]]


生成数组的时候还可以指定数据类型:

print np.array((1.2,2,3,4), dtype=np.int32)
[1 2 3 4]

同时也可以用numpy里的函数创建全是0或者全是1的数组:

print(np.zeros([3,4]))
[[ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]
print(np.ones([3,4]))
[[ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]]

利用arange创建数组:

import numpy as np
#一维数组
print np.arange(15)
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
print type(np.arange(15))
<type 'numpy.ndarray'>
#使用reshape函数给予数组一个新的形状,而不改变它的数据
#二维数组
print np.arange(15).reshape(3,5)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
#三维数组
c = np.arange(24).reshape(2,3,4)         # 3d array
print c
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
print type(np.arange(15).reshape(3,5))
<type 'numpy.ndarray'>

用linspace创建数组,看下例子就知道什么意思了

import numpy as np
C = np.linspace(0,3,10)#创建数组,从0开始,间隔3,创建10个数
print C
[0,3,6,9,12,15,18,21,24,27]

基本运算

数组的算术运算是按元素的。新的数组被创建并且被结果填充。

import numpy as np
a = np.array( [1,2,3,4] )
b = arange( 4 )
print b
array([0, 1, 2, 3])
c = a-b
print c
array([1, 1, 1, 1])
b**2
array([0, 1, 4, 9])
10*sin(a)
array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
a<35
array([True, True, False, False], dtype=bool)

NumPy中的乘法运算符*指示按元素计算,矩阵乘法可以使用dot函数或创建矩阵对象实现

A = array( [[1,1],[0,1]] )
B = array( [[2,0],[3,4]] )
print (A*B)                   
[[2, 0],
 [0, 4]]
print (dot(A,B)) 
[[5, 4],
[3, 4]]

numpy里Matrix和Array的区别

  之前的博客logistic回归python实现里的代码出现了矩阵和Array相关的语句,初学的时候还是有点困惑的,这里讲一下Matrix和Array的区别,大家可参考论Numpy中Matrix和Array的区别这篇博客来详细学习下,一下内容参考该博客。

  上面咱们看到numpy里的array可以创建矩阵,numpy里还有mat()就是将array矩阵化Matrix。有人就会疑问,上面还说array可以直接创建矩阵,怎么又出来一个矩阵化。其实在Numpy里matrices有个条件就是,必须是2维的;但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND)。Matrix就是Array的一个子集。matrix 拥有array的所有特性。

  在numpy中matrix的主要优势是:相对简单的乘法运算符号。例如,a和b是两个matrices,那么a*b,就是矩阵积。

import numpy as np

a=np.mat('4 3; 2 1')
b=np.mat([[1,2],[3,4]])#两种表示方法,[],''均可以
print(a)
[[4 3]
[2 1]]
print(b)
[[1 2]
[3 4]]
print(a*b)#在array里计算矩阵需要用dot(),这里直接可以用*
[[13 20]
[ 5  8]]

  **运算符作用也不同,Matrix是矩阵相乘,Array里则是对应的元素与元素相乘。因此,在写代码的时候Array和Matrix一定不要混淆,不然很容易出错。

  以上讲的都是numpy库非常基础的知识,而且涉及的比较少,大家可以参考前面给的几个链接了解详细的内容,或者用到哪学到哪。谢谢耐心阅读。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值