numpy 常用命令
1 numpy数据类型2 numpy数组2.1 创建数组2.1.1 创建一维数组 arange2.1.2 创建多维数组 array
2.2 改变数组维度2.2.1 reshape()2.2.2 shape2.2.3 resize()
2.3 多维数组展平2.4 切片2.5 数组组合2.5.1 水平组合hstack2.5.2 垂直组合vstack2.5.3 数组组合dstack2.5.4 列组合column_stack2.5.5 行组合row_stack
2.6 数组分割2.7 numpy数组与python列表转换2.8 其他常用命令
3 矩阵3.1 创建单位矩阵 eye3.2 零向量和零矩阵3.3 one向量或矩阵3.4 mat矩阵和array矩阵的取值3.5 mat矩阵和array矩阵的转换3.6 转置矩阵T3.7 矩阵求逆3.8 合并块矩阵 bmat3.9 加减除3.9.1 常数运算3.9.2 矩阵相加减3.9.3 除法 divide3.9.4 add、multiply、subtract3.9.5 展平求和 sum
3.10 乘法3.10.1 常数相乘3.10.2 矩阵相乘3.10.3 向量相乘3.10.4 阶乘
4 常用函数4.1 读写文件4.2 算数平均值 mean4.3 最大值 最小值 max min4.4 取值范围 ptp4.5 中位数 median4.6 排序 msort4.7 方差 var4.8 标准差 std4.9 相邻元素差 diff4.10 算数平方根 sqrt4.11 满足条件索引 where4.12 根据索引获得元素 take4.13 最值比较4.14 e的指数 exp4.15 linespace4.16 界定便捷 clip4.17 满足条件的元素 compress4.18 三角函数4.19 最值索引
5 便携函数5.1 协方差 cov5.2 对角线元素diagonal5.3 矩阵的迹 trace5.4 相关系数 corrcoef5.5 绝对值abs5.6 多项式拟合5.7 符号函数sign5.8 去噪piecewise5.9 判断是否是实数 isreal
1 numpy数据类型
dtype
关键字说明
intiint32或int64,由所在平台决定精度的整数int8 int16 int32 int64有符号整数uint8 uint16 uint32 uint64无符号整数float16 float32 float64复数complex64 complex128复数
2 numpy数组
2.1 创建数组
2.1.1 创建一维数组 arange
格式:np.arange(start,end,step,dtype)
np
.arange
(10)
>> [0 1 2 3 4 5 6 7 8 9]
np
.arange
(2,10)
>> [2 3 4 5 6 7 8 9]
np
.arange
(2,10,3)
>> [2 5 8]
np
.arange
(2,10,3,dtype
='float64')
>> [2. 5. 8.]
2.1.2 创建多维数组 array
np
.array
([1,5])
>> [1 5]
np
.array
([[1,5],[6,10]])
>> [[ 1 5]
[ 6 10]]
2.2 改变数组维度
命令说明
reshape()不在原数组上修改,返回改变后的结果shape得到或者设置维度(修改原数组)resize()原数组上修改
2.2.1 reshape()
a
= np
.arange
(12)
b
= a
.reshape
(3,4)
print(a
)
print(b
)
>> [ 0 1 2 3 4 5 6 7 8 9 10 11]
>> [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
2.2.2 shape
a
= np
.arange
(12)
a_shape
= a
.shape
print(a_shape
)
>> (12,)
a
.shape
= (3,4)
print(a
)
>> [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
2.2.3 resize()
a
= np
.arange
(12)
b
= a
.resize
(3,4)
print(b
)
>> None
print(a
)
>> [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
2.3 多维数组展平
命令:
ravel()flatten()
说明:
不改变原数组
a
= np
.array
([[1,2],[3,4]])
a_ravel
= a
.ravel
()
a_flatten
= a
.flatten
()
print(a_ravel
)
>> [1 2 3 4]
print(a_flatten
)
>> [1 2 3 4]
2.4 切片
a
= np
.array
([[1,2],[3,4]])
print(a
)
>> [[1 2]
[3 4]]
print(a
[0,0])
>> 1
>
print(a
[:,0])
>> [1 3]
其中":"表示任意,a[:,0]表示任意行的索引0列
2.5 数组组合
2.5.1 水平组合hstack
a
= np
.array
([[1,2],[3,4]])
b
= np
.array
([[5,6],[7,8]])
print(np
.hstack
((a
,b
)))
>> [[1 2 5 6]
[3 4 7 8]]
2.5.2 垂直组合vstack
a
= np
.array
([[1,2],[3,4]])
b
= np
.array
([[5,6],[7,8]])
print(np
.vstack
((a
,b
)))
>> [[1 2]
[3 4]
[5 6]
[7 8]]
2.5.3 数组组合dstack
a
= np
.array
([[1,2],[3,4]])
b
= np
.array
([[5,6],[7,8]])
print(np
.dstack
((a
,b
)))
>> [[[1 5]
[2 6]]
[[3 7]
[4 8]]]
2.5.4 列组合column_stack
a
= np
.array
([[1,2],[3,4]])
b
= np
.array
([[5,6],[7,8]])
print(np
.column_stack
((a
,b
)))
>> [[1 2 5 6]
[3 4 7 8]]
2.5.5 行组合row_stack
a
= np
.array
([[1,2],[3,4]])
b
= np
.array
([[5,6],[7,8]])
print(np
.row_stack
((a
,b
)))
>> [[1 2]
[3 4]
[5 6]
[7 8]]
2.6 数组分割
a
= np
.array
([[1,2],[3,4]])
print(a
[0,0])
>> 1
print(a
[:,0])
>> [1 3]
2.7 numpy数组与python列表转换
命令说明
tolist()转成数组astype(类型)指定转换数组的类型
a
= np
.arange
(5)
print(a
.tolist
())
>> [0, 1, 2, 3, 4]
print(a
.astype
(float))
>> [0. 1. 2. 3. 4.]
2.8 其他常用命令
功能命令
获取数据类型dtype占用内存的字节数itemsize数组的维度或者数组轴的个数ndimreal返回复数的实部imag返回复数的虚部flat返回扁平迭代器
3 矩阵
3.1 创建单位矩阵 eye
eye
= np
.eye
(3)
print(eye
)
>> [[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
3.2 零向量和零矩阵
命令说明
zero()创建零向量或矩阵zero_like()和目标一样维度的零向量或矩阵
x_v
= np
.zeros
(5)
print(x_v
)
>> [0. 0. 0. 0. 0.]
x_m
= np
.zeros
([2,4])
print(x_m
)
>> [[0. 0. 0. 0.]
[0. 0. 0. 0.]]
x_v
= np
.array
([1,2,3,4])
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.zeros_like
(x_v
))
>> [0 0 0 0]
print(np
.zeros_like
(x_m
))
>> [[0 0 0]
[0 0 0]]
3.3 one向量或矩阵
命令说明
ones()创建值为1的向量或矩阵ones_like()创建和目标一样维度的值为1的向量或矩阵
print(np
.ones
(5))
>> [1. 1. 1. 1. 1.]
print(np
.ones
([2,3]))
>> [[1. 1. 1.]
[1. 1. 1.]]
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.ones_like
(x_m
))
>> [[1 1 1]
[1 1 1]]
3.4 mat矩阵和array矩阵的取值
mat取值:[m,n]array取值:[m][n]
x_v_m
= np
.mat
('1 2 3;4 5 6')
x_v_a
= np
.array
([[1,2,3],[4,5,6]])
print(x_v_m
[1,2])
>> 6
print(x_v_a
[1][2])
>> 6
print(x_v_m
[0,:])
>> [[1 2 3]]
print(x_v_a
[0])
>> [1 2 3]
print(x_v_m
[:,0])
>> [[1]
[4]]
3.5 mat矩阵和array矩阵的转换
.A 把mat转成arraynp.mat() 把mat转成array
x_m
= np
.mat
('1 2 3; 4 5 6')
x_a
= x_m
.A
print(type(x_a
))
>> <class 'numpy.ndarray'>
>
x_m
= np
.mat
(x_a
)
print(type(x_m
))
>> <class 'numpy.matrix'>
3.6 转置矩阵T
x_m
= np
.mat
('1 2 3; 4 5 6')
print(x_m
)
>> [[1 2 3]
[4 5 6]]
print(x_m
.T
)
>> [[1 4]
[2 5]
[3 6]]
3.7 矩阵求逆
.I 如果矩阵不可逆,会报异常
x_m
= np
.mat
('1 2 3; 4 5 6 ; 0 0 1')
print(x_m
.I
)
>> [[-1.66666667 0.66666667 1. ]
[ 1.33333333 -0.33333333 -2. ]
[ 0. 0. 1. ]]
3.8 合并块矩阵 bmat
空格: 水平合并分号:垂直合并
x_m
= np
.mat
('1 2;3 4')
print(np
.bmat
('x_m x_m'))
>> [[1 2 1 2]
[3 4 3 4]]
print(np
.bmat
('x_m;x_m'))
>> [[1 2]
[3 4]
[1 2]
[3 4]]
3.9 加减除
3.9.1 常数运算
a
= np
.mat
('1 2 ; 3 4')
print(a
+ 2)
print(a
- 2)
print(a
/ 2)
3.9.2 矩阵相加减
a
= np
.mat
('1 2 ; 3 4')
b
= np
.mat
('5 6 ; 7 8')
print(a
+ b
)
>> [[ 6 8]
[10 12]]
print(a
- b
)
>> [[-4 -4]
[-4 -4]]
3.9.3 除法 divide
命令说明
/和divide普通除法//和floor_divide保留整数部分
x_v1
= np
.array
([1,2,3])
x_v2
= np
.array
([3,5,6])
print(np
.divide
(x_v1
,x_v2
))
>> [0.33333333 0.4 0.5 ]
print(np
.floor_divide
(x_v1
,x_v2
))
>> [0 0 0]
3.9.4 add、multiply、subtract
命令说明
add加法multiply乘法subtract减法
reduce 直接返回结果accumulate 保留中间过程
以加法为例:
如果是行向量,返回加和如果是矩阵,按列为单位加和,得到1*n的行向量
x_v
= np
.array
([1,2,3])
x_m
= np
.mat
('1 2 3;4 5 6;7 8 9')
print(np
.add
.reduce(x_v
))
>> 6
print(np
.add
.reduce(x_m
))
>> [[12 15 18]]
print(np
.add
.accumulate
(x_v
))
>> [1 3 6]
print(np
.add
.accumulate
(x_m
))
>> [[ 1 2 3]
[ 5 7 9]
[12 15 18]]
3.9.5 展平求和 sum
如果是矩阵,相当于展平后求和
x_v
= np
.array
([1,2,3,4])
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.sum(x_v
))
>> 10
print(np
.sum(x_m
))
>> 21
3.10 乘法
3.10.1 常数相乘
a
= np
.mat
('1 2 ; 3 4')
print(a
* 2)
>> [[2 4]
[6 8]]
3.10.2 矩阵相乘
类型*
array对应元素相乘mat矩阵相乘
命令说明
np.dot()矩阵相乘np.multiply()对应元素相乘
x_array_m
= np
.array
([[1,2,3],[4,5,6]])
print(x_array_m
* x_array_m
)
>> [[ 1 4 9]
[16 25 36]]
x_mat_m
= np
.mat
('1 2 3; 4 5 6')
print(x_mat_m
* x_mat_m
.T
)
>> [[14 32]
[32 77]]
3.10.3 向量相乘
类型*dotmultiply
array对应元素相乘内积对应元素相乘
x_v
= np
.array
([1,2,3,4])
print(x_v
* x_v
)
>> [ 1 4 9 16]
print(np
.dot
(x_v
,x_v
))
>> 30
print(np
.multiply
(x_v
,x_v
))
>> [ 1 4 9 16]
3.10.4 阶乘
命令说明
prod直接返回最大值comprod展平后计算阶乘
x_v
= np
.array
([1,2,3,4])
x_m
= np
.array
([[1,2,3],[6,7,8]])
print(np
.prod
(x_v
))
>> 24
print(np
.prod
(x_m
))
>> 2016
print(np
.cumprod
(x_v
))
>> [ 1 2 6 24]
print(np
.cumprod
(x_m
))
>> [ 1 2 6 36 252 2016]
4 常用函数
4.1 读写文件
写文件:savetxt读文件:loadtxt
delimiter:列的分隔符,默认是空格usecols:载入哪列,默认所有(元组的方式表示)unpack:是否转置,默认是否
matrix
= np
.mat
('1 2 3 ; 4 5 6; 7 8 9')
np
.savetxt
('matrix.csv',matrix
)
content
= np
.loadtxt
('matrix.csv',delimiter
=' ',usecols
=(0,1,2),unpack
=True)
print(content
)
4.2 算数平均值 mean
如果是矩阵,相当于把整个矩阵展评,然后求平均值
x_v
= np
.array
([1,2,3,4])
x_m
= np
.mat
('1 2 3; 4 5 6')
print(np
.mean
(x_v
))
>> 2.5
print(np
.mean
(x_m
))
>> 3.5
4.3 最大值 最小值 max min
x_v
= np
.array
([1,2,3,4])
x_m
= np
.mat
('1 2 3; 4 5 6')
print(np
.max(x_v
))
print(np
.max(x_m
))
print(np
.min(x_v
))
print(np
.min(x_m
))
4.4 取值范围 ptp
最大值和最小值的差
x_v
= np
.array
([1,2,3,4])
print(np
.ptp
(x_v
))
>> 3
4.5 中位数 median
x_v
= np
.array
([1,2,3,4])
print(np
.median
(x_v
))
>> 2.5
4.6 排序 msort
x_v
= np
.array
([1,2,5,1,2,6,2])
print(np
.msort
(x_v
))
>> [1 1 2 2 2 5 6]
4.7 方差 var
x_v
= np
.array
([1,2,3,4])
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.var
(x_v
))
>> 1.25
print(np
.var
(x_m
))
>> 2.9166666666666665
4.8 标准差 std
矩阵其实也是相当于展平后计算标准差的
x_v
= np
.array
([1,2,3,4])
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.std
(x_v
))
>> 1.118033988749895
print(np
.std
(x_m
)
>> 1.707825127659933
4.9 相邻元素差 diff
相邻元素的差,矩阵相当于计算多个行向量的结果
x_v
= np
.array
([1,2,3,4])
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.diff
(x_v
))
>> [1 1 1]
print(np
.diff
(x_m
))
>> [[1 1]
[1 1]]
4.10 算数平方根 sqrt
x_v
= np
.array
([1,2,3,4])
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.sqrt
(x_v
))
>> [1. 1.41421356 1.73205081 2. ]
print(np
.sqrt
(x_m
))
>> [[1. 1.41421356 1.73205081]
[2. 2.23606798 2.44948974]]
4.11 满足条件索引 where
对于行向量,返回的是满足where条件的索引对于矩阵,第一个是行的索引,第二个是列的索引
x_v
= np
.array
([1,2,3,4])
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.where
(x_v
> 2))
>> (array
([2, 3], dtype
=int64
),)
print(np
.where
(x_m
> 2))
>> (array
([0, 1, 1, 1], dtype
=int64
), array
([2, 0, 1, 2], dtype
=int64
))
ret
= np
.where
(x_m
> 2)
for i
in range(len(ret
[0])):
row_index
= ret
[0][i
]
column_index
= ret
[1][i
]
print(x_m
[row_index
][column_index
])
>> 3
4
5
6
4.12 根据索引获得元素 take
向量,根据索引返回矩阵,相当于把矩阵展平,然后根据索引返回
x_v
= np
.array
([1,2,3,4])
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.take
(x_v
,[0,1,2]))
>> [1 2 3]
print(np
.take
(x_m
,[4,5]))
>> [5 6]
4.13 最值比较
maximum 比较两个对象的最大值谁大,返回最大的那个对象minimum 比较两个对象的最小值谁小,返回最小的那个对象
x_v1
= np
.array
([0,2,3,4])
x_v2
= np
.array
([1,1,1,5])
print(np
.maximum
(x_v1
,x_v2
))
>> [1 2 3 5]
print(np
.minimum
(x_v1
,x_v2
))
>> [0 1 1 4]
4.14 e的指数 exp
x_v
= np
.array
([1,2,3,4])
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.exp
(x_v
))
>> [ 2.71828183 7.3890561 20.08553692 54.59815003]
print(np
.exp
(x_m
))
>> [[ 2.71828183 7.3890561 20.08553692]
[ 54.59815003 148.4131591 403.42879349]]
4.15 linespace
linspace(start,end,num)
start 起始end 终止,包括endnum 点的格式,相当于1/step
x_v1
= np
.linspace
(0,10,10)
print(x_v1
)
>> [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556
6.66666667 7.77777778 8.88888889 10. ]
4.16 界定便捷 clip
大于边界 取边界最大值小于边界 取边界最小值属于边界范围内,原数值输出
x_v
= np
.array
([1,2,3,4])
print(x_v
)
print(np
.clip
(x_v
,2,3))
>> [1 2 3 4]
[2 2 3 3]
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(x_m
)
print(np
.clip
(x_m
,2,4))
>> [[1 2 3]
[4 5 6]]
>> [[2 2 3]
[4 4 4]]
4.17 满足条件的元素 compress
只能基于向量操作,返回的是满足条件的元素,而不是索引
x_v
= np
.array
([1,2,3,4])
print(x_v
.compress
(x_v
> 2))
>> [3 4]
4.18 三角函数
sincostan
x_m
= np
.random
.rand
(10)
print(np
.sin
(x_m
))
print(np
.cos
(x_m
))
print(np
.tan
(x_m
))
4.19 最值索引
argmax和argmin,返回最大|小值索引(矩阵相当于展平)
x_v
= np
.array
([1,2,3,4])
print(np
.argmax
(x_v
))
>> 3
print(np
.argmin
(x_v
))
>> 0
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(np
.argmax
(x_m
))
>> 5
print(np
.argmin
(x_m
))
>> 0
5 便携函数
5.1 协方差 cov
x_v1
= np
.array
([1,2,3,4])
x_v2
= np
.array
([4,5,6,7])
print(np
.cov
(x_v1
,x_v2
))
>> [[1.66666667 1.66666667]
[1.66666667 1.66666667]]
5.2 对角线元素diagonal
diagonal返回一个对角元素构成的向量
x_m
= np
.array
([[1,2,3,4],[2,3,4,5]])
print(x_m
)
>> [[1 2 3 4]
[2 3 4 5]]
print(np
.diagonal
(x_m
))
>> [1 3]
5.3 矩阵的迹 trace
迹是对角元素的加和
x_m
= np
.array
([[1,2,3,4],[2,3,4,5]])
print(x_m
)
>> [[1 2 3 4]
[2 3 4 5]]
print(np
.trace
(x_m
))
>> 4
5.4 相关系数 corrcoef
x_v1
= np
.array
([1,2,3,4])
x_v2
= np
.array
([2,3,4,5])
print(np
.corrcoef
(x_v1
,x_v2
))
>> [[1. 1.]
[1. 1.]]
5.5 绝对值abs
x_m
= np
.array
([[-1,-2,-3],[1,2,3]])
print(np
.abs(x_m
))
>> [[1 2 3]
[1 2 3]]
5.6 多项式拟合
import numpy
as np
x
= np
.random
.rand
(50) * 50
y
= -(np
.sin
(x
)*2 + 0.5 * x
** 2)
fit
= np
.polyfit
(x
,y
,2)
fit_y
= np
.polyval
(fit
,x
)
from matplotlib
import pyplot
as plt
plt
.plot
(x
,y
,'b^',label
='sample')
plt
.plot
(x
,fit_y
,'r.',label
='predict')
print(np
.roots
(fit
))
fit_der
= np
.polyder
(fit
)
print('原来的系数',fit
)
print('求导后的系数',fit_der
)
x_line
= np
.linspace
(np
.min(x
),np
.max(x
),100)
y_line
= np
.polyval
(fit
,x_line
)
plt
.plot
(x_line
,y_line
,color
='y')
y_line_fit_der
= np
.polyval
(fit_der
,x_line
)
plt
.plot
(x_line
,y_line_fit_der
,color
='b')
plt
.xlabel
('sample')
plt
.ylabel
('label')
plt
.grid
(True)
plt
.legend
(loc
=0)
plt
.show
(
5.7 符号函数sign
<0 返回-1>0 返回1=0 返回0
x_v
= np
.array
([[1,2,3]]) - 2
x_m
= np
.array
([[1,2,3],[4,5,6]]) - 2
print(np
.sign
(x_v
))
>> [[-1 0 1]]
print(np
.sign
(x_m
))
>> [[-1 0 1]
[ 1 1 1]]
5.8 去噪piecewise
第一个参数:要修改的对象第二个参数:列表内写条件第三个参数:对应每个条件满足后,元素被赋什么值
x_v
= np
.array
([1,2,3,4]) - 1
x_m
= np
.array
([[1,2,3],[4,5,6]])
print(x_v
)
print(np
.piecewise
(x_v
,[x_v
< 1,x_v
> 2],[-100,100]))
>> [0 1 2 3 ]
>> [-100 0 0 100 ]
print(x_m
)
print(np
.piecewise
(x_m
,[x_m
< 3,x_m
> 5],[-100,100]))
>> [[ 1 2 3]
[ 4 5 6]]
>> [[-100 -100 0]
[ 0 0 100]]
5.9 判断是否是实数 isreal
x_v
= np
.array
([1+2j])
print(np
.isreal
(x_v
))
>> [False]