Numpy 数值运算

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数值时,如果有缺失会出现
当做了一个不合适的计算时候(正无穷等)

你可能感兴趣的:(Python,python)