Numpy 数值运算
程序员文章站
2022-03-20 18:23:40
Numpy认识:是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。>>> import numpy as np>>> import random0-19随机生成3行4列的数组>>> np.random.randint(0,20,(3,4))array([[15, 4, 1, 13], [ 4, 9, 9, 16], [13, 18, 8, 3...
Numpy认识:
是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
>>> import numpy as np
>>> import random
0-19随机生成3行4列的数组
>>> np.random.randint(0,20,(3,4))
array([[15, 4, 1, 13],
[ 4, 9, 9, 16],
[13, 18, 8, 3]])
输出1-10 并设置数据类型
>>> t=np.arange(1,10,dtype='float')
查看数组的数据类型
>>> print(t.dtype)
float64
修改数据类型
>>> t2.dtype
dtype('int32')
>>> t2=t2.astype(np.float64)
>>> t2.dtype
dtype('float64')
输出数据
>>> print(t)
[ 1. 2. 3. 4. 5. 6. 7. 8. 9.]
>查看数组的形状:
>>> t.shape
(9,)
修改数组的形状:
>>> t1=t.reshape(3,3)
>>> t1
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]])
把数组转为一维数组:
>>> t1.flatten()
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9.])
数组转置 行列转置:
>>> t1.transpose()
array([[ 1., 4., 7.],
[ 2., 5., 8.],
[ 3., 6., 9.]])
numpy取行数据
>>> t1
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]])
>>> t1[0]
array([ 1., 2., 3.])
>>> t1[1:]
array([[ 4., 5., 6.],
[ 7., 8., 9.]])
>>> t1[[0,2]]
array([[ 1., 2., 3.],
[ 7., 8., 9.]])
numpy取列数据
>>> t1
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]])
>>> t1[:,0]
array([ 1., 4., 7.])
>>> t1[:,1:]
array([[ 2., 3.],
[ 5., 6.],
[ 8., 9.]])
>>> t1[:,[0,2]]
array([[ 1., 3.],
[ 4., 6.],
[ 7., 9.]])
取指定位置数值
>>> t1[1,1]
5.0
取完全不相同的行列
>>> t1[[0,1,2],[0,2,0]]
array([ 1., 6., 7.])
按条件修改数值
>>> t1[t1<5]=5
>>> t1
array([[ 5., 5., 5.],
[ 5., 5., 6.],
[ 7., 8., 9.]])
条件修改
>>> t1
array([[ 5., 5., 5.],
[ 5., 5., 6.],
[ 7., 8., 9.]])
>>> np.where(t1==5,10,7)
array([[10, 10, 10],
[10, 10, 7],
[ 7, 7, 7]])
多条件修改
clip 小于10 转化为10 大于33转化为33
>>> t=np.arange(0,40).reshape(4,10)
>>> t
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39]])
>>> t.clip(10,33)
array([[10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 33, 33, 33, 33, 33, 33]])
拼接
>>> t
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> t1
array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]])
>>> np.vstack((t,t1))
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]])
>>> np.hstack((t,t1))
array([[ 0, 1, 2, 3, 4, 11, 12, 13, 14, 15],
[ 5, 6, 7, 8, 9, 16, 17, 18, 19, 20]])
数值交换
>>> t2
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]])
1、行交换
>>> t2[[1,2],:]=t2[[2,1],:]
>>> t2
array([[ 0, 1, 2, 3, 4],
[11, 12, 13, 14, 15],
[ 5, 6, 7, 8, 9],
[16, 17, 18, 19, 20]])
2、列交换
>>> t2
array([[ 0, 1, 2, 3, 4],
[11, 12, 13, 14, 15],
[ 5, 6, 7, 8, 9],
[16, 17, 18, 19, 20]])
>>> t2[:,[0,2]]=t2[:,[2,0]]
>>> t2
array([[ 2, 1, 0, 3, 4],
[13, 12, 11, 14, 15],
[ 7, 6, 5, 8, 9],
[18, 17, 16, 19, 20]])
添加一列标识数据
>>> zeros_data=np.zeros((t2.shape[0],1))
>>> zeros_data
array([[ 0.],
[ 0.],
[ 0.],
[ 0.]])
创建对角线为1的方阵
>>> t=np.eye(4)
>>> t
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]])
输出每行最大值的位置
>>> np.argmax(t,axis=0)
array([0, 1, 2, 3], dtype=int64)
>>> t2
array([[ 2, 1, 0, 3, 4],
[13, 12, 11, 14, 15],
[ 7, 6, 5, 8, 9],
[18, 17, 16, 19, 20]])
axis=0代表行 axis=1代表列
>>> np.argmax(t2,axis=0)
array([3, 3, 3, 3, 3], dtype=int64)
>>> np.argmax(t2,axis=1)
array([4, 4, 4, 4], dtype=int64)
>>> t2
array([[ 0., 1., 0., 3., 4.],
[ 0., 12., 11., 14., 15.],
[ 0., 6., nan, 8., 9.],
[ 0., nan, 16., 19., nan]])
数组中不是0的个数
>>> np.count_nonzero(t2)
15
数组中nan的个数
>>> t2!=t2
array([[False, False, False, False, False],
[False, False, False, False, False],
[False, False, True, False, False],
[False, True, False, False, True]], dtype=bool)
>>> np.count_nonzero(t2!=t2)
3
两种方法 取数组中的nan个数
>>> np.isnan(t2)
array([[False, False, False, False, False],
[False, False, False, False, False],
[False, False, True, False, False],
[False, True, False, False, True]], dtype=bool)
>>> np.count_nonzero(np.isnan(t2))
3
numpy中常用的统计函数:
求和: | t.sum(axis=None) |
均值: | t.mean(axis=None) |
中位数: | np.median(t,axis=None) |
最大值: | t.max(axis=None) |
最小值: | t.min(axis=None) |
极值: | np.(t,axis=None)【最大值和最小值差】 |
标准差: | t.std(axis=None) 【标准差是一组数据平均值分散程度的度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;反之较小的标准差反应数据的波动比较稳定。】 |
t.std(axis=None)默认返回多维数组的全部统计结果,指定axis则返回当前轴上的结果 |
>>> t1
array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]])
>>> t1.sum()
155
>>> t1.sum(axis=0)
array([27, 29, 31, 33, 35])
>>> t1.mean()
15.5
>>> t1.mean(axis=0)
array([ 13.5, 14.5, 15.5, 16.5, 17.5])
>>> np.median(t1)
15.5
>>> t1.max()
20
>>> t1.min()
11
>>> np.ptp(t1)
9
>>> t1.std()
2.8722813232690143
注:
a=b完全不复制,a和b互相影响
a=b[:]视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,两个数据变化一致
a=b.copy() 复制, a和b互不影响
nan出现情况
当读取本地的float数值时,如果有缺失会出现
当做了一个不合适的计算时候(正无穷等)
本文地址:https://blog.csdn.net/jq_123321/article/details/113939310