Numpy
来源:互联网 发布:复古照片相关软件 编辑:程序博客网 时间:2024/06/03 19:58
Numpy(Numerical Python)是一个开源的、高性能的Python数值计算库
为提高运算效率,ndarray数组值的类型默认相同,创建时自动指定默认数据类型(内存占用最大的值类型)
默认浮点类型(float)
导包:
import numpy as np
// 创建ndarray数组
可以自定义数据类型
np.array(数组,dtype=np.bool)# 转数组类型数组.astype(np.bool)
// 生成特定数组
np.arange()# 等间距生成,10比如1..4...7..10np.linspace(10)# 生成都是1的数组,可传递三维数组,几行几列,具体的个数np.ones()# 生成都是0的数组np.zeros()# 生成自定义模板的数组np.full((3,2),5) # 三行两列都是5# 创建一个正方的n*n单位矩阵,对角线为1,其余为0np.eye(5)
// 创建随机数组
np.random随机数子库对py内置random进行了补充
# 生成随机数为0-1之间np.random.rand(n)# 正态分布随机数np.random.randn(n)# 整数随机数np.random.randint(low, high, (shape))# 均匀分布的数组,有小数np.random.uniform(low, high, (size))# 从指定正态分布中抽取指定样本,loc为概率分布的均匀值,标准差scalenp.random.normal(loc, scale, (size))# 随机种子,给一个随机数字固定,可以在别的地方用到np.random.seed(s)# 将数组a的第0轴(最外维度)进行随机排列(洗牌),改变数组a,行在变,列不变np.random.shuffle(a)# 同上,不改变数组anp.random.permutation(a)# 从一维数组a中以概率p抽取元素,形成size形状新数组,replace表示是否可以重用元素,默认为False,p为抽取概率,本位置越高,抽取概率越高np.random.choice(a, size=None, replace=False, p=数组a/np.sum(b))
// 索引和切片
# 创建0-23, 共2个三行四列的数组np.arrange(24).reshape((2,3,4))# 一个三维数组,提取的话,python list是a[1][2][3], ndarange是a[1,2,3]# 可以用负数# a[1,:] 选取第一维数组里面所有# a[:,1] 选取所有维度,第一行# a[1,:,3] 选取第一维度数组所有行里的第三个值# a[:,0:2,1:3]# a[:,:,::2]-------------------------------------------------------------------------# 例子,布尔型索引names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])data = np.arange(28).reshape(7,4)names[names == 'Bob']# array(['Bob', 'Bob'], dtype='<U4')names == 'Bob'# array([ True, False, False, True, False, False, False], dtype=bool)# 姓名数组可以跟数字数字一一对应data[names == 'Bob']# array([[ 0, 1, 2, 3],# [12, 13, 14, 15]])# 可以将布尔型数组跟切片、整数、整数序列混合使用data[names == 'Bob',2:]# array([[ 2, 3],# [14, 15]])# 组合多个布尔型索引,进行逻辑运算# 组合条件,逻辑运算符:& 且,| 或,非(!= 或 ~)# 并集,交集(names == 'Bob') | (names == 'Will')# array([ True, False, True, True, True, False, False], dtype=bool)# 且,没有交集(names == 'Bob') & (names == 'Will')# array([False, False, False, False, False, False, False], dtype=bool)--------------------------------------------------------------------------// 数组修改a[:,0:2] = 1 # 切片批量修改a[:,0:2] = [[11,12],[13,14]] # 切片批量修改names[names == 'Bob'] = 'aaa' # 修改单个a为数组,a > 1 返回为true的索引np.where(a > 2) # 返回索引# (array([0, 0], dtype=int64),# array([0, 1], dtype=int64),# array([1, 0], dtype=int64))# 也可以用作三元表达式,满足条件,返回x,不满足返回ynp.where(条件,x, y)
// 维度变换
# 修改维度,但不改原值.reshape(shape)# 同上,但修改原值.resize(shape)# 降维度,把多维变成一维数组,不改变原值.flatten()
// Numpy统计
axis=1 行
axis=0 列
.sum(a,axis=None) # 求和.sort_values('字段', ascending=False)# 排序,升序排列.mean(a,axis=None) # 平均数.average(a,axis=None,weights=None) # 加权平均,weights加权值,不设为等权重,例子[10, 5, 1],每列分别X10,X5,X1在/(10+5+1).var(a,axis=None) # 方差:各数与平均数之差的平方的平均数.std(a,axis=None) # 标准差:方差平方根.min(a,axis=None) # 最小值.max(a,axis=None) # 最大值.argmin(a,axis=None).argmax(a,axis=None) # 求数组降维度以后最大值的下标.median(a,axis=None) # 中位数.ptp(a,axis=None) # 元素最大值与最小值的差.cumsum() # 累加,cumsum和cumprod之类的方法不聚合,产生一个中间结果组成的数组,默认一维数组,1为按原样.cumprod() # 累乘np.count_nonzero(arr > 0) # 计数非0值个数,布尔值会被强制转换为1和0,可以使用sum()对布尔型数组中的True值计数.bools.any() # 测试数组中是否存在一个或多个True.bools.all() # 数组中所有值是否都是True, 测试有没有空值.round(,0) # 把小数强制转换成0import pandas as pds = pd.Series(np.random.randint(0, 7, size=10)) # 统计出现的个数,左边是下标,右边是出场的次数s.value_counts() # 统计个数
// Numpy数据存取
- numpy提供了便捷的内部文件存取,将数据存为np专用的npy(二进制格式)或npz(压缩打包格式)格式
- npy格式以二进制存储数据的,在二进制文件第一行以文本形式保存了数据的元信息(维度,数据类型),可以用二进制工具查看查看内容
- npz文件以压缩打包文件存储,可以用压缩软件解压
a = np.array([['张三','李四','王五','赵六'],['11','12','13','14','15']])b = np.arange(24).reshape((2,3,4))np.save('a.npy',a) # 存为.npy文件np.savez("a.npz", ar0 = a, ar1 = b) # 多个数组存入一个.npz压缩包c = np.load('x.npy') # .npy文件读入数组d = np.load("y.npz") # .npz压缩包读入#d["ar0"] # 单独输出数组
// Numpy存储CSV文件
# 存储csv文件,本身是ASCII字符,不能存储非ASCII字符串,csv文件只能存储一维、二维数据,不能存储多维数据np.savetxt(frame,array,fmt='%.18e',delimiter=None)
// 读取csv文件
# 读取csv文件np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)# 去掉b'0.00'中的bnp.loadtxt('a.csv', dtype=bytes, delimiter=',').astype(str)
// ndarray-数组操作
# axis=0行 1列np.sort(a,axis=None) # 从小到大-np.sort(-a, axis=None) # 从大到小# 数组转置,把每一列抽出来,在横着放进去a.T# ndarray转为python list,用于和Python原生结合编写程序.tolist()# 数组去重,把重复去掉,并且按从小到大生成一个新的数组.unique(a)
// 数组拼接(数组合并)
ndarray是保存在内存中的一段连续值,增加值操作会重新分配内存,一般不推荐,可以用合并数组的方式模拟增加值
将两个或多个数组合并成一个新数组
# 数组合并, 如果数组不对应,需要先转置,在axis=1进行拼接np.concatenate((a1,a2,...), axis=0)
// 数组删除
删除操作不能精确选取元素,常被索引和切片查询赋值新变量代替
np.delete(arr, obj, axis=None)# 删除多列,会把没有被选中的其他值也删掉,有损失b3 = np.delete(a, [1,2], axis=1)
// Numpy-数据运算
矢量化运算也叫向量化运算,
- 标量:一个数值
- 广播机制:自动补齐,数组与标量之间的运算作用于数组的每一个元素
# 三维数组除以标量运算,列表中每一个值都会返回# 两个不同维度进行计算,维度小的会变成大的维度在进行运算,然后每个值单独做计算a/a.mean()
// Numpy矩阵运算
- NumPy有两种不同的数据类型:数组ndarray和矩阵matrix
- matrix是array的分支,用于矩阵计算
# 转换成矩阵对象m = np.matrix(x)# 每个数值+5m + 5 # 有复杂的运算体系,但不是相加那么简单m * 5
阅读全文
0 0
- Numpy
- numpy
- numpy
- Numpy
- numpy
- numpy
- numpy
- NumPy
- numpy
- numpy
- Numpy
- numpy
- Numpy
- Numpy
- Numpy
- Numpy
- NumPy
- numpy
- Android实现带边框的表格布局
- Linux python 重装
- 学习笔记9
- 五类arp介绍及功能
- Java算法面试题(006) 相遇问题(阿里)
- Numpy
- 机器学习的方法
- 问题记录 lua赋值函数类型后传参执行没效果
- Flink源码阅读:如何使用FlinkKafkaProducer将数据在Kafka的多个partition中均匀分布
- [DP-完全背包] HDU 1114
- JVM
- Problem G: 字符统计
- 微软人工智能和对话平台--知识商城体验
- 实验进行中:.NET WebAssembly支持