学习计算机视觉学习需要用到python的扩展库numpy进行数据分析,这篇文章仅记录numpy学习笔记
-
安装numpy以及包管理工具pip的使用:
命令行输入:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本
使用pip -v可以查看是否安装成功
在项目目录下pip install numpy,其他包安装也如此 -
numpy创建一个矩阵以及基本操作:
import numpy as np
list=[[1,2,3],[4,5,6]]
#将列表转为一个矩阵的方法
# 定义创建类型 使用arr.dtype获取
arr=np.array(list,dtype=np.int)
# 3行4列的0矩阵
zero=np.zeros((3,4))
# 全部为1
ones=np.ones((3,4))
# 为空 生成都接近0的数不是0
empty=np.empty((3,4))
# reshape重新定义形状
arrange=np.arange(10,20,2).reshape((3,4))
# 1-10 分为20端
arrange1=np.linspace(1,10,20)
print("维数number of dim:",arr.ndim)
# 几行几列
print("形状shape:",arr.shape)
# 总共元素
print("大小size:",arr.size)
- 矩阵运算:
普通+ - * / 不列举 为逐个运算
import numpy as np
a=np.array([[10,20],[30,40]])
b=np.arange(4).reshape((2,2))
# 对a中每个值求sin 使用numpy带的方法
# 其他三角函数同样 => [-5.44021111 9.12945251 -9.88031624 7.4511316 ]
c=10*np.sin(a)
# b中小于3的 => [ True True True False]
c=b<3
print("矩阵相乘:",np.dot(a,b),a.dot(b))
print("随机生成矩阵:",np.random.random((2,4)))
print("求和在维度为0(列) 1(行):",np.sum(b,axis=0))
print("求最小值/最大值:",np.min(a),np.max(a))
print("最小值/最大值的索引:",np.argmin(a),np.argmax(a))
print("平均值,中位值,",np.mean(a),np.average(a),np.median(a))
print("输出累加矩阵:",np.cumsum(b))
print("前向差分后的矩阵:",np.diff(b))
print("输出非零值得位置(以两个数组输出,一个为行位置,一个为列位置)",np.nonzero(b))
print("排序(逐行的排序)",np.sort(b))
print("矩阵的转置(行变列,列变行)",a.T,np.transpose(a))
print("矩阵的上下限设置,(小于5的为5,大于9的为9,中间不变)",np.clip(a,5,9))
几乎所有的方法都可以指定
axis=0
参数,为0对纵向进行运算,为1对横向进行计算
- nmupy索引:
import numpy as np
a=np.arange(3,15).reshape((3,4))
print(a[0][1])
print(a[1])
print("输出第2行所有的数:",a[1,:])
print("输出第2行第二个和第三个数:",a[1,1:3])
print("转化为只有1行的序列:",a.flatten())
#必须为一维的
print("从一维数组中随机抽取两个数:",np.random.choice(a,2,replace=False))
#迭代interation生成行和列
for row in a:
print(row)
for column in a.T:
print(column)
# 迭代生成每一项
for item in a.flat:
print(item)
- nmupy array的合并:
import numpy as np
# 其实还是一个序列,直接使用a.T是没有作用的
a=np.array([1,1,1])
b=np.array([2,2,2])
print("横向合并hstack horizontal stack:",np.hstack((a,b)))
print("纵向合并vstack vertical stack:",np.vstack((a,b)))
# print(a.T)
print("在列上添加一个维度:",a[:,np.newaxis])
print("在行上添加一个维度",a[np.newaxis,:])
print("在列方向上进行合并 为axis=1在行方向上进行合并",np.concatenate((a,b),axis=0))
- nmupy array的分割:
import numpy as np
a=np.arange(12).reshape((3,4))
# 不能进行不等分割
print("对矩阵进行横向分割",np.split(a,2,axis=1))
print("对矩阵进行不等分割:",np.array_split(a,3,axis=1))
# 更为简单的分割
print("纵向分割:",np.vsplit(a,3))
print("横向分割:",np.hsplit(a,4))
- deep copy:
import numpy as np
a=np.arange(4)
b=a
# deep copy
c=a.copy()
print(a is b)#True
print(c is a)#False