欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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随机生成34列的数组
>>> 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

相关标签: Python