理论
python列表与numpy数组的区别
使用Python列表可以存储一维数组,通过列表的嵌套可以实现多维数组。而numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器,存储效率和输入输出性能远优于Python中的嵌套列表。通常Numpy数组中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,因此在通用性能方面Numpy数组不及Python列表,但在科学计算中使用方面要比Python列表简单的多。
Numpy数组和矩阵的区别
- 矩阵必须是二维的,而数组可以是一维到任意维。
- 矩阵的主要优势是:相对简单的乘法运算符号
- 矩阵和数组都可以通过objects后面加
.T
得到其转置。但是矩阵还可以在后面加.H
得到共轭矩阵, 加.I
得到逆矩阵 - 相反的是在numpy里面数组遵从逐个元素的运算,所以对于数组c 和d的
c*d
运算相当于matlab里面的c.*d
运算。而矩阵相乘,则需要numpy里面的dot
示例
一维数组的输出
如下,对于一维数组的输出都是不同的
m_list=[1,2] # 结果为[1,2]
m_arr=np.array(m_list) # [1 2]
m_mat=np.mat(m_list) # [[1 2]],因为矩阵必须二维
二维数组的输出
m_list=[[1,2],[3,4]]
m_arr=np.array(m_list)
m_mat=np.mat(m_list)
结果为:
[[1, 2], [3, 4]]
[[1 2]
[3 4]]
[[1 2]
[3 4]]
其中数组和矩阵的数组在形式上是相同的,但是数组的维度会发生变化。
数组的维度会发生变化
做归约运算时,数组的维度会发生变化,比如平均运算:
m_list=[[1,2],[3,4]]
m_arr=np.array(m_list)
m_mat=np.mat(m_list)
print(m_arr.mean(1))
print(m_mat.mean(1))
结果如下:
[1.5 3.5]
[[1.5]
[3.5]]
同理,在获取某一行或某一列数据的时候也不一样:
m_list=[[1,2],[3,4]]
m_arr=np.array(m_list)
m_mat=np.mat(m_list)
print(m_arr[:,1]) #获取第二列元素
print(m_mat[:,1])
结果为:
[2 4]
[[2]
[4]]