【python数据处理】numpy快速入门集合

numpy是一个在python中做科学计算的基础库,重在数值计算,多用于在大型、多维数组上执行数值计算,使用起来非常快速方便。

目录

numpy创建数组(array矩阵)

数据的类型dtype

修改数组的数据类型astype

数组的形状shape

数组的计算

数组的广播机制

读取本地数据

numpy索引和切片

取行

取列

 取某行某列的值

取多行多列的值(行和列交叉位置的值)

取多个不相邻的点

numpy中数值的高级修改(条件修改)

单一条件修改

多条件修改(三元运算符)

clip裁剪

数组的拼接

其他方法工具

numpy中的nan和inf

nan的注意点

numpy中常用的统计函数


numpy创建数组(array矩阵)

使用numpy首先要在开始import入numpy包,并起别名为np(方便后面使用)

import numpy as np

#使用numpy生成数组,得到ndarray的类型
t1 = np.array([1,2,3])
print(t1)            #[1 2 3]
print(type(t1))      #<class 'numpy.ndarray'>

t2 = np.array(range(10))
print(t2)            #[0 1 2 3 4 5 6 7 8 9]
t3 = np.arange(10)
print(t3)            #[0 1 2 3 4 5 6 7 8 9]

print(t3.dtype)      #int64

注意np.arrange的用法:arrange( [ start , ]  stop [ , step] , dtype = None )

数据的类型dtype

采用默认时生成的数组数据类型与系统的位数有关(一般为int64 或 int32等)

#创建numpy中指定的数据类型
t4 = np.array(range(1,4),dtype=float)    或使用dtype=" ? "
print(t4)            #[ 1. 2. 3.]
print(t4.dtype)      #float64

 使用数据类型代码时要记得加引号

t4 = np.array(range(1,4),dtype="i1")
print(t4)            #[1 2 3]
print(t4.dtype)      #int8

t5 = np.array([1,1,0,1],dtype=bool)
print(t4)            #[ True True False True]
print(t4.dtype)      #bool

修改数组的数据类型astype

#调整数据类型
t6 = t5.astype("int8")
print(t6.dtype)        #int8

np.round(t5,2)  使用round保留浮点数的小数位数

数组的形状shape

#一维数组
t1 = np.arange(10)
print(t1)            #[0,1,2,3,4,5,6,7,8,9]
print(t1.shape)      #(10,)


#二维数组
t2 = np.array([[1,2,3],[4,5,6]])
print(t2)
'''
[[1 2 3]
 [4 5 6]]
'''
print(t2.shape)      #(2,3)


#三维数组
t3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(t3)
'''
[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]
'''
print(t3.shape)     #(2, 2, 3)

一维数组的shape为(数量)

二维数组的shape为(行数,列数)

三维数组的shape为(块数,行数,列数)

可以使用 t3 = t3.reshape(12,) 对数组的形状进行新的表示

如果不知道该数组的数量,可以使用 t3 = t3.reshape((t3.shape[0]*t3.shape[1],))将二维数组修改为一维数组

但其实使用t3 = t3.reshape(-1) 或 t3 = t3.flatten()即可展开

数组的计算

数组的广播机制

数组的加减乘除对数组内的每一个值都进行

广播原则:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。

读取本地数据

轴(axis):行和列分别对应0轴和1轴

常见的小型数据文件格式 CSV:Comma-Separated Value,逗号分隔值文件,每一行的数据表示一条记录

np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=Flase)

 unpack = True时是将读入的数据进行转置,与t3.transpose()、t3.T、t3.swapaxes(1,0)功能相同

numpy索引和切片

取行

t1 = np.arange(100).reshape(10,10)
'''
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
40	41	42	43	44	45	46	47	48	49
50	51	52	53	54	55	56	57	58	59
60	61	62	63	64	65	66	67	68	69
70	71	72	73	74	75	76	77	78	79
80	81	82	83	84	85	86	87	88	89
90	91	92	93	94	95	96	97	98	99
'''
#取行
print(t1[1])        # [10 11 12 13 14 15 16 17 18 19]
#取连续的多行
print(t1[7:])
'''
[[70 71 72 73 74 75 76 77 78 79]
 [80 81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98 99]]
'''
#取不连续的多行
print(t1[[0,3,7]])
'''
[[ 0  1  2  3  4  5  6  7  8  9]
 [30 31 32 33 34 35 36 37 38 39]
 [70 71 72 73 74 75 76 77 78 79]]
'''

取列

#取列
print(t1[:,0])        # [ 0 10 20 30 40 50 60 70 80 90]
#取连续多列
print(t1[:,:2])
'''
[[ 0  1]
 [10 11]
 [20 21]
 [30 31]
 [40 41]
 [50 51]
 [60 61]
 [70 71]
 [80 81]
 [90 91]]
'''
#取不连续多列
print(t1[:,[0,3,5]])
'''
[[ 0  3  5]
 [10 13 15]
 [20 23 25]
 [30 33 35]
 [40 43 45]
 [50 53 55]
 [60 63 65]
 [70 73 75]
 [80 83 85]
 [90 93 95]]
'''

 取某行某列的值

# 取第2行第2列的值
a = t1[1,1]
print(a)        # 11
print(type(a))  # <class 'numpy.int32'>

取多行多列的值(行和列交叉位置的值)

# 取第2-4行,5-7列的结果
print(t1[1:4,4:7])
'''
[[14 15 16]
 [24 25 26]
 [34 35 36]]
'''

取多个不相邻的点

#选出来的结果是 (0,0)   (3,0)
print(t1[[0,3],[0,0]])        #[ 0 30]

#选出来的结果是 (0,0)   (2,1)  (2,3)
print(t1[[0,2,2],[0,1,3]])    #[ 0 21 23]

numpy中数值的高级修改(条件修改)

1.可以直接对某些位置的内容进行赋值修改

2.条件修改

单一条件修改

a = t1<25
print(a)
'''
[[ True  True  True  True  True  True  True  True  True  True]
 [ True  True  True  True  True  True  True  True  True  True]
 [ True  True  True  True  True False False False False False]
 [False False False False False False False False False False]
 [False False False False False False False False False False]
 [False False False False False False False False False False]
 [False False False False False False False False False False]
 [False False False False False False False False False False]
 [False False False False False False False False False False]
 [False False False False False False False False False False]]
'''
print(a.dtype)      # bool


t1[t1<25] = 0
print(t1)
'''
[[ 0  0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0 25 26 27 28 29]
 [30 31 32 33 34 35 36 37 38 39]
 [40 41 42 43 44 45 46 47 48 49]
 [50 51 52 53 54 55 56 57 58 59]
 [60 61 62 63 64 65 66 67 68 69]
 [70 71 72 73 74 75 76 77 78 79]
 [80 81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98 99]]
'''

多条件修改(三元运算符)

print(np.where(t1<50,0,100))
'''
[[  0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0]
 [100 100 100 100 100 100 100 100 100 100]
 [100 100 100 100 100 100 100 100 100 100]
 [100 100 100 100 100 100 100 100 100 100]
 [100 100 100 100 100 100 100 100 100 100]
 [100 100 100 100 100 100 100 100 100 100]]
'''

clip裁剪

# 将小于35的修改为35,大于90的修改为90
print(t1.clip(35,90))
'''
[[35 35 35 35 35 35 35 35 35 35]
 [35 35 35 35 35 35 35 35 35 35]
 [35 35 35 35 35 35 35 35 35 35]
 [35 35 35 35 35 35 36 37 38 39]
 [40 41 42 43 44 45 46 47 48 49]
 [50 51 52 53 54 55 56 57 58 59]
 [60 61 62 63 64 65 66 67 68 69]
 [70 71 72 73 74 75 76 77 78 79]
 [80 81 82 83 84 85 86 87 88 89]
 [90 90 90 90 90 90 90 90 90 90]]
'''

数组的拼接

np.vstack        竖直拼接(vertically)

np.hstack        水平拼接(horizontally)

行列交换:

# 行交换
t1[[1:2],:] = t1[[2:1],:]
# 列交换
t1[:,[0:2]] = t1[:,[2:0]]

其他方法工具

1.获取最大值最小值的位置:

  • np.argmax(t1,axis=0)
  • np.argmin(t1,axis=1)

2.创建一个全为0的数组:np.zeros()

3.创建一个全为1的数组:np.ones()

4.创建一个对角线为1的正方形数组(方阵):np.eye()

5.生成随机数

numpy中的nan和inf

nan(NAN,Nan) :not a number表示不是一个数字

inf(-inf,inf):infinity无穷大,inf表示正无穷,-inf表示负无穷

nan的注意点

1.两个nan是不相等的

print(np.nan == np.nan)    #False
print(np.nan != np.nan)    #True

2.利用以上特性,可以判断数组中nan的个数        np.count_nonzero(t1 != t1)或np.isnan(t1)

3.nan和任何值计算都为nan

numpy中常用的统计函数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值