numpy 是python的一个矩阵类型,提供了大量矩阵处理的函数。运行速度快,内部用c语言实现。
包含两种基本类型:数组和矩阵
1.数组
多维数组的类型是:numpy.ndarray。
使用numpy.array方法创建
import numpy as np
p=np.array([1,2,3,4])
# np.array((1,2,3,4)) 等价
print type(p)
#
print np.shape(p)
# (4,) 获取数组的形状维度
print pp*2
#每个元素乘2
print pp**2
# 元素平方
# 多维数组
p1=np.array([[1,2,3],[4,5,6]])
print np.shape(p1)
# (2, 3)
# 支持多维访问
print p1[0]
#[1 2 3]
print p1[0][0]
# 1
print p1[0,0]
#也支持类似矩阵的访问,结果为1,和p1[0][0] 相同
# 当把两个数组乘起来时,是对应元素相乘
print p1[0]*p1[1]
#[ 4 10 18]
# 在array数组中,* 代表对应元素相乘
详细可见: http://www.jb51.net/article/49397.htm
#把列表转成矩阵
pp=np.mat(p)
print pp
# [[1 2 3 4]]
print np.shape(pp)
# (1, 4) 转成mat,维度从 (4,) 变成了 (1, 4)
# 矩阵相乘
print pp*p
print pp*pp
## 运行均出错,维度不匹配
## 在matrix 矩阵中,* 代表矩阵相乘,必须保证维度合理
## 如果要进行对应元素相乘的操作
print np.multiply(pp,pp)
print np.multiply(pp,p)
# [[ 1 4 9 16]]
print pp.T *p
#[[ 1 2 3 4]
# [ 2 4 6 8]
# [ 3 6 9 12]
# [ 4 8 12 16]]
print pp *pp.T
# [[30]]
print pp*p.T
# 运行出错,p.T的维度依然是 (4,) 和p 一样
# 尤其要注意
print pp.sort()
# 原地排序
print pp.argsort()
# 返回每个元素的排序索引
print np.mean(pp)
# 计算均值
# 矩阵切片
p1=np.array([[1,2,3],[4,5,6]])
print np.mat(p1)
print p1[1,1:]
# [5 6]
3.易混淆点
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
c1=np.array([[1],[1],[1]])
c2=np.array([1,1,1])
##遇到这样的向量要注意,向量
print np.mat(c2)
# [[1 1 1]]
c3=np.array([[1,1,1]])
print np.shape(a)
# (2, 3)
print np.shape(c1)
#(3, 1)
print np.shape(c2)
#(3,)
print np.shape(c3)
#(1, 3)
print np.dot(a,c1)
print np.mat(a)*np.mat(c1)
#上面两个结果一样
#[[ 6]
# [15]]
print a*c1
#出错
print np.dot(a,c2)
# [ 6 15]
# 维度(2,3) (3,) 可以相乘,对于数组来说
print np.dot(a,c3)
# 均出错
发现第三点的易混淆,已经有一篇很棒的博客了
很赞,http://blog.csdn.net/iamzhangzhuping/article/details/52370241
对于matrix,* 和 dot都表示矩阵相乘,必须遵守矩阵相乘法则
对于array,* 代表对应元素相乘,dot代表类似于矩阵相乘,但是并不要求操作数像矩阵相乘的要求那么严格,相乘的结果的格式也不是矩阵,而是数组, 例如 print np.dot(a,c2)
,代码31行