Numpy是处理矩阵、数组的一个工具,下面来看一下基本操作:
np.array(),直接将输入的数组转换成矩阵,打印一下,属于ndarray,n维矩阵系列。
打出维数:array.ndim
打出形状:array.shape
打出大小:array.size
1.创建array
区别在哪?换个方式:
np.array把原来的List,带","的List换成了不带逗号的ndarray,列表换成了数组,后面是不带逗号的。
np.array()内部关键字:
定义类型:dtype = np.int64,
dtype = np.int32
dtype = np.float64(精确,占空间)
dtype = np.float32(节省空间)
......
多出来的小数点,float类型。
2.np.zeros((x,y))
x,行数,y,列数
3行4列的全0矩阵。
3.np.ones((x,y))
同上面一样:
3行4列的全1矩阵。
4.np.arange(起始位,终止位,步长)
5.np.reshape((x,y))
重新规划矩阵形状,比如生成一个1行12列的矩阵,转换成3行4列的矩阵:
这里看到,首先arange,传入一个参数时,默认x=0,步长为1,
其次,np.xxx().xxxx()前后按顺序来执行命令
6.numpy的简单运算
简单的+,-:
简单的*与**:
**代表幂指数,
三角函数:
调用np.sin() np.cos(),矩阵传入括号内部。
其他函数类似。
7.输出布尔值矩阵
比如,判断一个矩阵中的元素是否小于某个数,输出的也应是个布尔值的矩阵:
8.元素乘与矩阵乘
矩阵间的成法有两种,一种是元素之间对应相称,另一种是矩阵相乘:
分别为c = a*b, c = np.dot(a,b)
为了方便,转换成2*2矩阵形式:
9.0-1的随机矩阵
np.random.random((x,y))
10.矩阵最大、最小、和
np.sum() 查看矩阵内部和
np.min() 查看矩阵内部最小值
np.max() 查看矩阵内部最大值
内部关键字:
axis: axis = 1,逐行计算,返回逐行的结果矩阵,axis = 0 逐列计算,返回逐列结果矩阵
1是行,0是列。
11.矩阵索引
np.argmin(),索引矩阵最小值所在位置
这里返回的,是0位,与7位,不是数值。
也可以根据a[x,y] a[x]/a[x,:],a[:,y] ,a[x,a:b],a[a:b,y]
(: 单独一个冒号代表所在行或列的所有值)
如:a[:,3]代表第四列的所有值
a[x,y]:
a[x]a[x,:]:
这个是可以直接赋值的,创建一个新对象:
a[:,1]:
a[x,a:b] 第x+1行,的第a+1到b的值
12.平均值,中位数
np.mean() 平均值,
np.median(),中位数
13.累加
np.cumsum(),
14.逐位差
np.diff(),逐个计算两个相邻的差,返回矩阵
15.倒序
倒序,起始位置与终止位置互换,步长为 -1
16.转置
np.transpose()
[ ].T
以前的图片旋转,内部调用的也是这个,图片上多附(角度)
还有一种,直接加T,可直接用于乘法,
17.区间修剪,np.clip()
在矩阵中,在某个区间内,规定最大值,最小值,剪掉没有交集的部分
np.clip(a,a_min,a_max,out = None)
矩阵a 最大值 11,最小值4,现在规定剪刀的最大值为9,最小值为4,那么,矩阵中超过9的一律剪平,全置为9,4刚好为最小
这次,最小值为3,矩阵最小值为4,没有什么可剪的。保持最小值为4
18.循环
逐行输出:for row in a :
print(row)
逐行输出列:for row in a.T:
print(row)
逐个元素输出,先看下np.flatten()
可以说flatten等于reshape的**-1,-1次方。
Ok,现在逐个输出元素:
19.合并
np.vstack((a,b)) a,b上下合并
np.hstack((a,b)) a,b左右合并
np.concatenate((a,b,b,a),axis = 0/1),多个数列合并
20.数列与矩阵控制
始终区分不开什么是数列,什么是矩阵,
个人理解就是,一个[ ]里面放数字叫做数列,两个[ ],[ ]里面放数字,那叫做两个数列
数列外边再套个[ ],如[ [ ] ],这叫做一行矩阵,[[ ] [ ] ]这叫做,1行2列矩阵
那么如何把一行的数列转换成一行矩阵呢?
提供一个方法,创建一个维度,newaxis,
a[newaxis,:] newaxis这个关键字,直接就是在所在的位置,x或y创建了一个维度,对于一行数列,在行的位置上创建一个维度,那结果是一行矩阵,如果在列位置上创建一个维度,那结果是一列矩阵,又如果,行和列都创建了一个维度,那么此行数列作为一组数列保存在创建的新矩阵中。
简单的方法,.reshape(),直接操作维度。
21.矩阵分割
np.split(ary,indices_or_sections,axis = 0/1)
axis = 1,把a矩阵的行分成2份
如果axis = 0:
有余数,报错,不能够平分列,把2换成3,把列分成三份:
另一种方法:np.vsplit() 列分割v,
np.hsplit() 横分割h
22.赋值与复制
在Python中,对变量的赋值,等号两边完全是一致的,包括变量的Id:
也就是说,改变后来的变量,对前面的变量都会有影响
看下np.copy():
对d中元素进行操作:
换个方式