numpy详解

本文深入讲解NumPy库的高级使用技巧,包括数组构建、数据类型转换、数学运算、索引与切片、统计分析及文件读写等核心功能。特别强调了数组运算的灵活性和高效性,以及如何利用NumPy进行复杂数据操作。
1. 构建对象
import numpy as np
(1)通过list
a = [[1, 2, 3], [1, 2, 4], [2, 3, 4]]
b= np.array(a)

(2)内置的方法
np.zeros((2, 3))# 构建2行3列的全0 数组
np.ones((2, 3))# 构建2行3列的全1 数组
np.empty((2, 3))# 构建2行3列的空值 数组
np.full((2, 3), 10)# 构建2行3列的全10 数组
np.eye(4)# 构建类似于3*3的单位矩阵

(3)通过随机数
np.random.randn(2, 3)# 正态分布
np.random.randint(0, 10, (2, 3))#构建2行3列 在0-9的区间随机数值
np.random.rand((2, 3))#构建2*3 的数组, 数组里面的值服从均匀分布

(4)通过reshape()
np.arange(0, 100, 1).reshape(10, 10)# 构建10*10的数组 值从0-100 间隔为1的递增

2.astype转换数据类型

In [31]: arr = np.array([1, 2, 3, 4, 5])

In [32]: arr.dtype
Out[32]: dtype('int64')

In [33]: float_arr = arr.astype(np.float64)

In [34]: float_arr.dtype
Out[34]: dtype('float64')



(1)同shape大小数组的运算
 o = arr + arr
 o = np.add(arr, arr)# 加
 p = arr - arr
 p = np.subtract(arr, arr) # -
 q = arr * arr
 q = np.multiply(arr, arr) # *

 r = arr / arr
 r = np.divide(arr, arr) # /

 (2) array和标量之间的运算
 arr + 1 #跟数组里面每个元素+1
 1 / arr # 取倒数
 arr ** 0.5 # 求平方根           arr ** 2  求平方



 2.取数   默认的如果没有','的则为行 例如arr[:5] 则为行 取前五行 arr[,:5] 取前五列
(1)切片索引
arr = np.arange(0, 100, 1).reshape(10, 10) # 构建10行10列,从0-100 逐渐递增的数组
b = arr[:5, 2:4]/arr[:5][:, 2:4]# 针对行和列做切片索引
c = arr[:5] # 针对行做切片索引     [0, 5]
b = arr[:, 2:4]# 针对列做切片索引  [ 2, 4)

(2) 花式索引
arr = np.arange(0, 100, 1).reshape(10, 10)
e = arr[[4, 2, 1], :]# 针对行花式索引                                                 从第4 2 1 行排列开始 依次排序
e = arr[:, [-4, -2, -1]]# 针对列花式索引                                              从1, 2, 4列开始排序 如果不加'-'则会从4,2,1开始排序
g = arr[[4, 3, 2], [1, 2, 4]]# 取出来的数对应的索引(4, 1), (3, 2), (2, 4)
i = arr[[4, 2, 1], :][:, [5, 2, 1]]# 取出来的数第4 2 1 行和 5 2 1 列 形成3*3数组        从第4行 的5 2 1 列组合一起 依次排序在第一行, 接着2 ,1行依次
i = arr[np.ix_([4, 2, 1], [5, 2, 1])]# 同上

(3)布尔型索引

I:针对数组里面的每一个位置进行bool判断
arr = np.arange(0, 100, 1).reshape(10, 10)
bool_arr = arr > 50 # 布尔型的矩阵
arr[bool_arr]#  取出来的数是一个列表, bool_arr 对应的TRUE的位置的数

II:只针对行或列进行bool取数
arr = np.arange(0, 6, 1).reshape(3, 2)
bool_inx = [True, False, True]
arr[bool_inx]# 针对行,通过bool取数      取行数为true的行
bool_col = 【False, True】
arr[:, bool_col]# 针对列,通过bool取数


13.统计

13.1 基本统计
df.sum(axis=0, skip_na=True) # a统计每一列的总和,零长度的数组的sum为0
df.count()# 每一列的数量
series.count()
df.mean() # 每一列的均值,算数平均数,零长度的mean为nan
df.median() # 中位数
df.describe() # 返回常规一些统计量:count、mean、min、max、分位数



7.导入/导出
np.save()/np.load()#存储或者导出一个array
np.savez()/np.load()#存储或者导出多个array
np.savetxt('filename.txt',arr,delimiter='分隔符')/np.loadtxt('filename.txt',delimiter='分隔符')#针对txt格式的导入和导出





间接排序: argsort和lexsort


In [174]: values = np.array([5, 0, 1, 3, 2])
In [175]: indexer = values.argsort()

lexsort跟argsort差不多, 只不过它可以⼀次性对多个键数组执⾏间接排
序( 字典序) 。 假设我们想对⼀些以姓和名标识的数据进⾏排序:
In [182]: first_name = np.array(['Bob', 'Jane', 'Steve', 'Bill', 'Barbara'])
In [183]: last_name = np.array(['Jones', 'Arnold', 'Arnold', 'Jones', 'Walters
In [184]: sorter = np.lexsort((first_name, last_name))
In [185]: zip(last_name[sorter], first_name[sorter])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值