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/ ...
随机推荐
- String知识点整理
使用双引号创建字符串时,JVM会现在字符串常量池中查找是否已存在该字符串,存在则返回,不存在则在池中创建后再返回.与此同时,使用String的intern方法也是类似处理. 使用new String的 ...
- SQL server数据库拼接语句(STUFF)用法
我对SQLserver 中STUFF函数的理解是在sql server中将字符串中的第一个字符串某一部分字符替换成另外一部分,组成新的字符串数据. STUFF(character_expression ...
- Apktool-安卓逆向反编译工具的安装与使用
一.安装Apktool 1.下载Windows 包装器脚本(右键单击,将连接另存为apktool.bat) 2.下载 Apktool-2,重命名为apktool.jar 3.将下载的放在同一文件夹下 ...
- Linux下七种文件类型、文件属性及其查看方法
1.七种文件类型 普通文件类型 Linux中最多的一种文件类型, 包括 纯文本文件(ASCII):二进制文件(binary):数据格式的文件(data);各种压缩文件.第一个属性为 [-] 目录文件 ...
- 音视频八股文(12)-- ffmpeg 音频重采样
1重采样 1.1 什么是重采样 所谓的重采样,就是改变⾳频的采样率.sample format.声道数等参数,使之按照我们期望的参数输出. 1.2 为什么要重采样 为什么要重采样?当然是原有的⾳频参数 ...
- 2020-10-22:谈谈java中的LongAdder和LongAccumulator的相同点和不同点。
福哥答案2020-10-22: 简单回答:相同点:都是多个单元操作.不同点:LongAdder相加,LongAccumulator自定义计算规则. 中级回答:相同点: LongAddr与LongAcc ...
- 2021-02-09:如何删除一个链表的倒数第n个元素?
2021-02-09:如何删除一个链表的倒数第n个元素? 福哥答案2021-02-09: 1.创建虚拟头元素,虚拟头元素的Next指针指向头元素.2.根据快慢指针求倒数第n+1个元素,假设这个元素是s ...
- 2021-05-28:跳跃游戏 II。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可
2021-05-28:跳跃游戏 II.给定一个非负整数数组,你最初位于数组的第一个位置.数组中的每个元素代表你在该位置可以跳跃的最大长度.你的目标是使用最少的跳跃次数到达数组的最后一个位置.假设你总是 ...
- sqlmap的一些简单使用命令
路径 C:\Users\Administrator\AppData\Local\Programs\Python\Python39\sqlmap post型注入 *每次使用都要重新抓包,不可以使用旧的数 ...
- 2021年蓝桥杯C/C++大学B组省赛真题(路径)
题目描述: 小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径. 小蓝的图由2021 个结点组成,依次编号1 至2021. 对于两个不同的结点a, b,如果a 和b 的差的绝 ...