小白的机器学习:Numpy矩阵扫盲

27 篇文章 4 订阅
3 篇文章 0 订阅

让我们马上开始。 NumpyPython的数学计算库。 它使我们能够高效地进行计算,比Python自带的列表强太多了。

在本文中,我将介绍机器学习和数据科学中经常会用到的Numpy的基础知识。 我不打算涵盖Numpy库的所有功能。 这是numpy教程系列的第一部分。

第一件事就是你导入Numpy的方法:

import numpy as np

上面的语句用来告诉python,在后续的代码中将使用np来引用numpy

现在我们来分别创建pythonnp数组:

# python array
a = [1,2,3,4,5,6,7,8,9]

# numpy array
A = np.array([1,2,3,4,5,6,7,8,9])

如果只是打印输出,两者看不出太多的区别。

print(a)
print(A)
====================================================================[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1 2 3 4 5 6 7 8 9]

那么,为什么还要使用np数组而不是Python内置的数组?

答案在于,np数组计算效率更高,也更易于操作。

如果你对这一点有兴趣深入了解,可以查看为什么用numpy代替python列表?。如果你想马上就练习下Numpy,推荐使用汇智网的在线Numpy运行环境

让我们接下来看看更酷的东西:

np.arange()

np.arange(0,10,2)
====================================================================array([0, 2, 4, 6, 8]

arange([start],stop, [step])的功能,是从start开始,以step为步长、以end为结束条件(不包含该值),来生成一个数组。例如:np.arange(0,10,2)的作用就是生成如下的数组:

array([0, 2, 4, 6, 8])

需要注意的是,最终生成的数组中不包含stop

下面是另一个示例:

np.arange(2,29,5)
====================================================================
array([ 2,  7, 12, 17, 22, 27])

在此我要提醒的是,这个数组也可以被称为矩阵矢量。 所以,当我说矩阵的形状(shape)为2×3时,不要感到困惑,看起来不过就像这样的数组:

array([ 2,  7, 12,], 
      [17, 22, 27])

现在,我们来谈谈np数组的形状(shape)。

Shapenp数组的一个属性,表示数组的形状。例如:

A = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
A.shape
====================================================================
(9,)

这是一个1阶矩阵(数组),9个元素构成一行。理想情况下,它就是一个1×9的矩阵,对吗?

我同意你的看法,这就是reshape()发挥作用的地方,它可以改变矩阵的维度。

让我们看看reshape()的效果。 只要重构后的矩阵和原始矩阵具有相同数量的元素,就可以变形为任意多的维度:

A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
A.reshape(1,9)
====================================================================
array([[1, 2, 3, 4, 5, 6, 7, 8, 9]])

请注意,reshape()返回一个多维矩阵。 开头的两个方括号表明了这一点。 和[1,2,3,4,5,6,7,8,9]相比,显然[[1,2,3,4,5,6,7,8,9]]是具有多个维度的 。

再看另一个例子:

B = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
B.reshape(3,3)
====================================================================
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

查看B的形状,它应该是(3,3)

B.shape
====================================================================
(3,3)

完美。 继续看np.zeros()

现在该你告诉我,下面的代码结果是什么:

np.zeros((4,3))
====================================================================
???????????

对,它会创建一个全是04×3的矩阵。 代码输出如下:

np.zeros((4,3))
====================================================================
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

np.zeros((n,m))返回一个nxm的零矩阵。 就这么简单。

再来猜一下:np.eye()是做什么的?

提示:eye()表示Identity

np.eye(5)
====================================================================
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  1.]])

np.eye()返回一个具有指定维数的单位矩阵(Identity Matrix)。

如果我们需要计算两个矩阵的乘积呢?

没问题,我们有np.dot()

np.dot()执行矩阵乘法,前提是两个矩阵都是可乘的。 这意味着第一个矩阵的列数与第二个矩阵的行数必须匹配。

例如两个矩阵:A =(2,3)B =(3,2)A的列数和矩阵B中的行数都是3,因此AB是可以相乘的。

还是让看看矩阵相乘的代码吧:

# generate an identity matrix of (3 x 3)
I = np.eye(3)
I
====================================================================
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

# generate another (3 x 3) matrix to be multiplied.
D = np.arange(1,10).reshape(3,3)
D
====================================================================
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

现在把两个矩阵相乘:

# perform actual dot product.
M = np.dot(D,I)
M
====================================================================
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.],
       [ 7.,  8.,  9.]])

很好! 现在你知道计算矩阵的乘法是多么地简单了! 另外请注意,数组现在是浮点型的。

那么如何累加矩阵的元素呢?

# add all the elements of matrix.
sum_val = np.sum(M)
sum_val
====================================================================
45.0

np.sum()的功能就是累加矩阵中的全部元素。

不过,它有2种不同的调用形式。

1. 按行累加

# sum along the rows
np.sum(M,axis=1)
====================================================================
array([  6.,  15.,  24.])

6是第1行(1,2,3)的总和。

15是第二行(4,5,6)的总和。

24是第3行(7,8,9)的总和。

2.按列累加

# sum along the cols
np.sum(M,axis=0)
====================================================================
array([ 12.,  15.,  18.])

12是第一列(1,4,7)的总和。

15是第二列(2,5,8)的总和。

18是第三列(3,6,9)的总和。

原文:Introduction to Numpy -1 : An absolute beginners guide to Machine Learning and Data science.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值