Python数据分析易错知识点归纳(二):Numpy
二、numpy
不带括号的基本属性
arr.dtype
arr.shape # 返回元组
arr.size
arr.ndim # 维度
arr.reshape/arr.resize/np.resize
- arr.reshape(不同维度size...)有返回值,不会改变原数值;arr.resize((不同维度size...))无返回值,会直接改变原数组;np.resize(arr, (不同维度size...))有返回值,不会改变原数组(注意reshape与resize参数形式的不同,前者是几个参数,后者是一个元组)
- reshape要求前后元素个数一致,否则报错;resize可放大或缩小原数组形状,方大时,用0补充,缩小时,删除多余的。
- 维度size填写时:reshape的不同维度size可以填一个-1,其值可以根据arr.size自动计算;而resize则没有这个特性,但不会报错,当其余维度一样时,-1自动变为其它维度一样;否则-1自动变为1。
'''
numpy.resize 函数返回指定大小的新数组
如果新数组大小大于原始大小,则包含原始数组中的元素的副本
numpy.resize(arr, shape)
shape:返回数组的新形状
'''
a = np.array([[1, 2, 3], [4, 5, 6]])
print('第一个数组:')
print(a)
print('第一个数组的形状:')
print(a.shape)
b = np.resize(a, (3, 2))
print('第二个数组:')
print(b)
print('第一个数组:')
print(a) # 第一个数组不变
print('第二个数组的形状:')
print(b.shape)
a.resize((3, 2))
print('第一个数组改变:')
print(a) # 第一个数组改变
# 注意a的第一行在b中重复出现,因为尺寸变大
print('修改第二个数组的大小:')
b = np.resize(a, (3, 3))
print(b)
# 对比
arr = np.arange(12)
arr1 = arr.reshape(-1, 2, 2) # -1自动计算
print(len(arr1)) # 3
arr2 = np.resize(arr, (2, -1, 2)) # (2, 2, 2)
print(arr2)
'''
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
'''
arr3 = np.resize(arr, (2, -1, 3)) # (2, 1, 3)
print(arr3)
'''
[[[0 1 2]]
[[3 4 5]]]
'''
np.amin/np.amax
a = np.array([[3, 7, 5], [8, 4, 3], [2, 4, 9]])
print('原数组:')
print(a)
print('调用amin()函数横向最小值:')
print(np.amin(a, 1)) # 与np.min一样
print('再次调用amin()函数纵向最小值:')
print(np.amin(a, 0))
print('调用amax()函数:')
print(np.amax(a)) # 与np.max一样
print('调用amax()函数纵向最大值:')
print(np.amax(a, axis=0))
np.argmax、np.argmin
np.argwhere
indexName = np.argwhere(scoreAll == name)
np.argsort
# numpy.argsort()函数返回的是数组值从小到大的索引值
x = np.array([3, 1, 2])
print('原数组:')
print(x)
print('对x调用argsort()函数:')
y = np.argsort(x)
print(y)
```
对 x 调用 argsort() 函数:
[1 2 0] # 排序后的索引值
```
np.sort
a = np.array([[3, 7], [9, 1]])
print('原数组:')
print(a)
print('调用sort() 函数:')
print(np.sort(a)) # 默认是axis=1
print('按列排序:')
print(np.sort(a, axis=0))
# 在sort函数中排序字段
# 若定义了dtype, 则每个元组视为一个整体,排序时,元组内部不会改变
dt = np.dtype([('name', 'S10'), ('age', int)])
a = np.array([('raju', 21), ('anil', 25), ('ravi', 17), ('amar', 27)], dtype=dt)
print(a)
'''
[(b'raju', 21) (b'anil', 25) (b'ravi', 17) (b'amar', 27)]
'''
print(np.sort(a)) # 若order缺省,按照第一个字段排
'''
[(b'amar', 27) (b'anil', 25) (b'raju', 21) (b'ravi', 17)]
'''
print(np.sort(a, order='age'))
'''
[(b'ravi', 17) (b'raju', 21) (b'anil', 25) (b'amar', 27)]
'''
# 不同之处
# 由于没有定义dtype, numpy会将所有的元素都转换为字符串, 元组也会转为列表
a = np.array([('raju', 21), ('anil', 25), ('ravi', 17), ('amar', 27)])
print(a)
'''
[['raju' '21']
['anil' '25']
['ravi' '17']
['amar' '27']]
'''
print(np.sort(a))
'''
[['21' 'raju']
['25' 'anil']
['17' 'ravi']
['27' 'amar']]
'''
np.cumsum
arr = np.arange(6).reshape(2, 3)
print(arr)
'''
[[0 1 2]
[3 4 5]]
'''
print(np.cumsum(arr)) # 先展开,再累计求和
'''
[ 0 1 3 6 10 15]
'''
print(np.cumsum(arr, axis=0))
'''
[[0 1 2]
[3 5 7]]
'''
print(np.cumsum(arr, axis=1))
'''
[[ 0 1 3]
[ 3 7 12]]
'''
np.append
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
print('向数组添加元素:')
print(np.append(a, [7, 8, 9]))
print('沿轴0添加元素:')
print(np.append(a, [[7, 8, 9]], axis=0))
print('沿轴1添加元素:')
print(np.append(a, [[5, 5, 5], [6, 6, 6]], axis=1))
'''
[[1 2 3]
[4 5 6]]
向数组添加元素:
[1 2 3 4 5 6 7 8 9]
沿轴0添加元素:
[[1 2 3]
[4 5 6]
[7 8 9]]
沿轴1添加元素:
[[1 2 3 5 5 5]
[4 5 6 6 6 6]]
'''
np.insert
a = np.array([[1, 2], [3, 4], [5, 6]])
print('第一个数组:')
print(a)
print('未传递Axis参数。在插入之前输入数组会被展开。')
print(np.insert(a, 3, [11, 12]))
print('传递Axis参数。会广播值数组来配输入数组。')
print('沿轴0广播插入第2行:')
print(np.insert(a, 1, [11, 12], axis=0))
print('沿轴1广播插入第2列:')
print(np.insert(a, 1, 11, axis=1))
'''
第一个数组:
[[1 2]
[3 4]
[5 6]]
未传递Axis参数。在插入之前输入数组会被展开。
[ 1 2 3 11 12 4 5 6]
传递Axis参数。会广播值数组来配输入数组。
沿轴0广播插入第2行:
[[ 1 2]
[11 12]
[ 3 4]
[ 5 6]]
沿轴1广播插入第2列:
[[ 1 11 2]
[ 3 11 4]
[ 5 11 6]]
'''
np.delete
a = np.arange(12).reshape(3, 4)
print('第一个数组:')
print(a)
print('未传递Axis参数。在插入之前输入数组会被展开。')
print(np.delete(a, 5))
print('删除第二列:')
print(np.delete(a, 1, axis=1))
print('删除后a:')
print(a)
print('包含从数组中删除的替代值的切片:')
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(np.delete(a, np.s_[::3]))
'''
第一个数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
未传递Axis参数。在插入之前输入数组会被展开。
[ 0 1 2 3 4 6 7 8 9 10 11]
删除第二列:
[[ 0 2 3]
[ 4 6 7]
[ 8 10 11]]
包含从数组中删除的替代值的切片:
[2 3 5 6 8 9]
'''
np.unique
去重并排序
a = np.array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])
print('第一个数组:')
print(a)
print('第一个数组的去重值:') # 去重并排序
u = np.unique(a)
print(u)
print('新列表元素在旧列表中的位置下标:')
u,indices = np.unique(a, return_index=True)
print(indices)
print('可以看到每个和原数组下标对应的数值:')
print(a)
print('去重数组的下标:')
u,indices = np.unique(a, return_inverse=True)
print(u)
np.extract
x = np.arange(100).reshape(10, 10)
cond = np.mod(x, 2) != 0
print(np.extract(cond, x)) # 抽取后展开
'''
[ 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47
49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95
97 99]
'''
np.intersect1d
x = np.array([1, 1, 2, 5, 4])
y = np.array([2, 1, 4, 5])
xy, x_ind, y_ind = np.intersect1d(x, y, return_indices=True)
print(xy) # [1 2 4 5]
print(x_ind) # [0 2 4 3]
print(y_ind) # [1 0 2 3]
切片和布尔过滤
arr = np.arange(15).reshape(3, 5)
arr1 = arr[:, 1:2] # 也可以写成arr[..., 1:2]
'''
[[ 1]
[ 6]
[11]]
'''
arr2 = arr[1:, 2:]
'''
[[ 7 8 9]
[12 13 14]]
'''
arr3 = arr[[0, 0, 2, 2], [1, 3, 1, 3]]
'''
[ 1 3 11 13]
'''
arr4 = arr[(arr >= 5) & (arr <= 10)] # 会展开
'''
[ 5 6 7 8 9 10]
'''
arr5 = arr[(arr < 5) | (arr > 10)]
'''
[ 0 1 2 3 4 11 12 13 14]
'''
# 注意Numpy布尔过滤与DataFrame的区别
x=np.arange(1,10,1).reshape([3,3])
print(x>4)
'''
[[False False False]
[False True True]
[ True True True]]
'''
print(x[x>4]) # 注意这里与DataFrame的区别:DataFrame是形状不变,不满足的值为NaN
'''
[5 6 7 8 9]
'''
# 利用np.where进行布尔过滤
arr = np.arange(10)
print(arr[np.where(~(arr % 2 == 0))]) # [1 3 5 7 9]
np.random
- 生成均匀分布的随机数
- np.random.rand(size) 范围[0,1) size: 如 2; 如2, 3
- np.random.randint(low, high, size) 指定范围[low, hight)的随机整数 size如 2; 如(2, 3)
- np.random.uniform(low, high, size) 指定范围[low, hight)(默认[0,1))随机均匀分布 size如 2; 如(2, 3)
- 生成正态分布随机数
- np.random.randn(size) 标准正态分布(均值为0,方差为1) size: 如 2; 如2, 3
- np.random.normal(loc,scale,size) 指定均值loc和方差scale的一般正态分布
np.around
print(np.around(a, decimals=1)) # 保留一位小数四舍五入 # python基本方法是round
print(np.around(a, decimals=-1)) # 整数个位数四舍五入 -2为十位数 -3为百位数
loadtxt()
data = np.loadtxt('iris_data.csv') # 默认分隔符为空格
Python数据分析易错知识点归纳(二):Numpy的更多相关文章
- python函数-易错知识点
定义函数: def greet_users(names): #names是形参 """Print a simple greeting to each user in th ...
- JavaScript易错知识点整理
前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...
- JavaScript 易错知识点整理
本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES ...
- JavaScript易错知识点整理[转]
前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...
- JS易错知识点
JAVASCRIPT易错知识点整理 前言 本文是学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由 ...
- Java易错知识点(1) - 关于ArrayList移除元素后剩下的元素会立即重排
帮一个网友解答问题时,发现这样一个易错知识点,现总结如下: 1.易错点: ArrayList移除元素后,剩下的元素会立即重排,他的 size() 也会立即减小,在循环过程中容易出错.(拓展:延伸到所有 ...
- JavaScript易错知识点
JavaScript易错知识点整理1.变量作用域上方的函数作用域中声明并赋值了a,且在console之上,所以遵循就近原则输出a等于2. 上方的函数作用域中虽然声明并赋值了a,但位于console之下 ...
- 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化
继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...
- Python入门---易错已错易混淆----知识点
1.not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9 结果会输出啥? 根据优先级:(not 1) or (0 and 1) or (3 a ...
- 《Python数据分析常用手册》一、NumPy和Pandas篇
一.常用链接: 1.Python官网:https://www.python.org/ 2.各种库的whl离线安装包:http://www.lfd.uci.edu/~gohlke/pythonlibs/ ...
随机推荐
- javasec(四)序列化与反序列化基本原理
title: javasec(四)序列化与反序列化基本原理 tags: - javasec - 反序列化 categories: - javasec cover: 'https://blog-1313 ...
- 数据分析05-matplotlib基本绘图、高级绘图
数据分析-05 数据分析-05 matplotlib基本功能详解 基本绘图 1)绘图核心API 2)设置线型.线宽 3)设置坐标轴范围 4)设置坐标刻度 5)设置坐标轴 6)图例 7)特殊点 8)备注 ...
- 我做了一个 VSCode 插件版的 ChatGPT
大家好,我是风筝 其实很早之前就想学学 VSCode 插件开发了,但是又不知道做什么,加上我这半吊子前端水平,迟迟没有动手. 最近 ChatGPT 火的一塌糊涂,我也一直在用,真的非常好用,有些问题之 ...
- 都说DevOps落地难,到底难在哪里?也许你还没找到套路
当你打开这篇文章的时候,也许你也在为DevOps的落地而苦恼,也许你的组织正在尝试DevOps转型,作为一线的实践者,说说我对这个"落地难"的看法,欢迎交流不同看法- DevOps ...
- 非极大值抑制(NMS)算法详解
NMS(non maximum suppression)即非极大值抑制,广泛应用于传统的特征提取和深度学习的目标检测算法中. NMS原理是通过筛选出局部极大值得到最优解. 在2维边缘提取中体现在提取边 ...
- 实例讲解Spring boot动态切换数据源
摘要:本文模拟一下在主库查询订单信息查询不到的时候,切换数据源去历史库里面查询. 本文分享自华为云社区<springboot动态切换数据源>,作者:小陈没烦恼 . 前言 在公司的系统里,由 ...
- 【技术分享】万字长文图文并茂读懂高性能无锁 “B-Tree 改”:Bw-Tree
[技术分享]万字长文图文并茂读懂高性能无锁 "B-Tree 改":Bw-Tree 原文链接: https://mp.weixin.qq.com/s/I5TphQP__tHn6JoP ...
- ODOO13之六:Odoo 13开发之模型 – 结构化应用数据
在本系列文章第三篇Odoo 13 开发之创建第一个 Odoo 应用中,我们概览了创建 Odoo 应用所需的所有组件.本文及接下来的一篇我们将深入到组成应用的每一层:模型层.视图层和业务逻辑层. 本文中 ...
- 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Infer ...
- 【C#/.NET】xUnit和Moq实现TDD
目录 前置条件 Moq xUnit TDD 实践 创建项目 红灯 绿灯 重构 单元测试一些最佳实践 总结 前置条件 Moq 安装Moq包 Install-Package Moq Moq是一个Mo ...