在机器学习中,经常会用到矩阵,在python语言中,向量、矩阵等抽象概念如何表示和使用,自己之前一直有些搞不明白,今天就试着总结下吧。
问题
自己需要明确的一些问题:
- python中list,二维list如何操作
- numpy中array,二维array如何操作
- python list和numpy array的区别,转化
- 向量如何表示
- 矩阵的一些常用操作
- 向量、矩阵的运算
list
python内置了list,也就是数组,可以用来表示向量和矩阵:
|
|
关于下标,文档里一张图说的很清楚:
|
|
2d-list:
表示矩阵可以用python的2维list:
|
|
表示上呢,python内置的list也就这么回事,具体使用的时候,有一些操作还是值得注意的。
关于list所有可以的操作,文档中给出了:https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range
(真难找,python的文档咋这么不清楚,把reference和tutorial放在一起的感觉,不喜欢)
+
和*
的操作,就是concat:
|
|
NumPy Array
在机器学习中,好多代码第一行就是import numpy as np
哈哈,的确,用numpy的array会更多一些,操作也更丰富一些
ndarray对多维支持很友好,从名字就可以看出来
基本属性
常用的有:
ndim
shape
size
|
|
创建
直接从list创建:
|
|
用方便的一些填充函数:
|
|
类似的还有np.ones()
和np.empty()
用np.arange()
或者np.linspace()
生成一定间隔的数据,其实用的比较少
运算
numpy文档:
Arithmetic operators on arrays apply elementwise. A new array is created and filled with the result.
所以,一些基本的操作就明确了,比如:*
, **
等
特别要注意是*
,并不是矩阵乘法,而是elementwise的乘法
sum
, min
, max
:
|
|
当然也可以用python自己的函数min
, max
, sum
,这其中应该会有一个cast的过程
shape操作
|
|
stack & split
hstack
vstack
:分别水平堆叠和垂直堆叠
hsplit
vsplit
: 分别水平气氛和垂直切分
copy
- no copy (alias):
b = a
- shallow copy:
b = a.view()
- deep copy:
b = a.copy()
vector vs. matrix
之前自己一直有疑惑的是,numpy中的vector和matrix有什么关系,是不是一样的。
因为,在运算的过程中,经常需要矩阵和向量之间进行运算,有时候会有对不齐的操作。
经过了解,明确了,一维数组和矩阵中的行向量或者列向量是不一样的!不能直接进行运算!!
两者的相互转化及运算:
|
|
总结
用NumPy的array,会比自带的强大很多!
一维array和矩阵中的行向量和列向量不一样!
NumPy的文档还是很清晰的,有问题找文档!(Python的文档是真的辣鸡呀~)