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/ ...
随机推荐
- Python用哈希算法查找相似图片(包括不同分辨率,不同大小,不同格式的图片)
# -*- coding: utf-8 -*- ''' Python用哈希算法查找相似图片并放入[_df]的文件夹中 相似图片包括不同分辨率,不同大小,不同格式,只要图片相似就会算重复文件 安装cv2 ...
- javasec(一)java反射
这篇文章介绍javasec基础知识--java反射. 0x01 反射是什么? 反射是一种机制,利用反射机制动态的实例化对象.读写属性.调用方法.构造函数. 在程序运行状态中,对于任意一个类或对象,都能 ...
- Job for nginx.service failed because the control process exited with error code.
1. nginx启动报错: Job for nginx.service failed because the control process exited with error code. See & ...
- 文章学习:TPRE:分布式门限代理重加密
学习文章:TPRE:分布式门限代理重加密 前言 成方金科新技术实验室与隐语团队合作,构建了"基于国密的分布式门限代理重加密算法TPRE",为用户提供了一种安全.高效.自主可控的数据 ...
- 2022-10-17:特殊的二进制序列是具有以下两个性质的二进制序列: 0 的数量与 1 的数量相等。 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。 给定一个特殊的二进制序列 S,以
2022-10-17:特殊的二进制序列是具有以下两个性质的二进制序列: 0 的数量与 1 的数量相等. 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量. 给定一个特殊的二进制序列 S,以 ...
- 2021-02-07:给定两棵二叉树的头节点head1和head2,如何判断head1中是否有某个子树的结构和head2完全一样?
福哥答案2021-02-07: 对head1和head2序列化为str1和str2.然后用kmp算法去判断str2是否是str1的子串.如果是,head2是子树:如果不是,head2不是子树. 代码用 ...
- 2021-06-30:给定长度为m的字符串aim,以及一个长度为n的字符串str ,问能否在str中找到一个长度为m的连续子串, 使得这个子串刚好由aim的m个字符组成,顺序无所谓, 返回任意满足条件
2021-06-30:给定长度为m的字符串aim,以及一个长度为n的字符串str ,问能否在str中找到一个长度为m的连续子串, 使得这个子串刚好由aim的m个字符组成,顺序无所谓, 返回任意满足条件 ...
- 【故障公告】博客站点一台阿里云负载均衡被DDoS攻击
13:06 收到阿里云的电话与邮件通知,博客站点的一台阿里云负载均衡因被 DDoS 攻击被关进黑洞(所有访问被屏蔽),部分用户的访问受影响,由此给您带来麻烦,请您谅解. 您的IP:x.x.x.x 实例 ...
- 【使用git之旅】
前言 在学习各种语言的时候我总喜欢把例子改成有自己想法并且有趣的程序, 但是时间一长,我发现在本地管理很麻烦,于是乎想到了github和gitee, 然后昨晚一时兴起,就开始了学习,开个博客记录一下我 ...
- IntelliJ IDEA上手这一篇就够了,从入门到上瘾
前言 每次换电脑,最最最头疼的事情莫过于安装各种软件和搭建开发环境.这算是不想换电脑的一个原因吧(最主要还是穷).除非是电脑坏了开不了机或者点一下卡一下,真不想换电脑.每次换电脑都得折腾好久. 趁着这 ...