二、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的更多相关文章

  1. python函数-易错知识点

    定义函数: def greet_users(names): #names是形参 """Print a simple greeting to each user in th ...

  2. JavaScript易错知识点整理

    前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...

  3. JavaScript 易错知识点整理

    本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES ...

  4. JavaScript易错知识点整理[转]

    前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...

  5. JS易错知识点

    JAVASCRIPT易错知识点整理 前言 本文是学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由 ...

  6. Java易错知识点(1) - 关于ArrayList移除元素后剩下的元素会立即重排

    帮一个网友解答问题时,发现这样一个易错知识点,现总结如下: 1.易错点: ArrayList移除元素后,剩下的元素会立即重排,他的 size() 也会立即减小,在循环过程中容易出错.(拓展:延伸到所有 ...

  7. JavaScript易错知识点

    JavaScript易错知识点整理1.变量作用域上方的函数作用域中声明并赋值了a,且在console之上,所以遵循就近原则输出a等于2. 上方的函数作用域中虽然声明并赋值了a,但位于console之下 ...

  8. 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化

    继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...

  9. 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 ...

  10. 《Python数据分析常用手册》一、NumPy和Pandas篇

    一.常用链接: 1.Python官网:https://www.python.org/ 2.各种库的whl离线安装包:http://www.lfd.uci.edu/~gohlke/pythonlibs/ ...

随机推荐

  1. Typora 最新中文版安装破解V1.4.8

    Typora中文破解版是一款好用极简免费的跨平台Markdown编辑器,软件使用这款软件能够帮助用户轻松将文本转换到HTML,软件从底层向上设计,软件支持markdown的标准语法,同时这款软件还支持 ...

  2. Python_16 配置文件与封装

    一.查缺补漏 1. ctrl + alt +L 规范格式 2. Python 使用 ini&yaml 配置文件 http://testingpai.com/article/1621245437 ...

  3. List 集合手动分页的方法总结

    前言 在工作中难免会遇到,将组装的集合数据进行分页处理,现在我将自己手动分页的三种方法进行总结,有不对的地方敬请大家批评指正! 一.数据准备 // 当前页 int pageIndex = 1; // ...

  4. 2022-05-15:N个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输。 问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件; 问题2:至

    2022-05-15:N个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输. 问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件: 问题2:至 ...

  5. 2022-04-24:位集 Bitset 是一种能以紧凑形式存储位的数据结构。 请你实现 Bitset 类。 Bitset(int size) 用 size 个位初始化 Bitset ,所有位都是 0

    2022-04-24:位集 Bitset 是一种能以紧凑形式存储位的数据结构. 请你实现 Bitset 类. Bitset(int size) 用 size 个位初始化 Bitset ,所有位都是 0 ...

  6. 2021-05-12:给定一个数组arr,只能对arr中的一个子数组排序, 但是想让arr整体都有序。返回满足这一设定的子数组中,最短的是多长?

    2021-05-12:给定一个数组arr,只能对arr中的一个子数组排序, 但是想让arr整体都有序.返回满足这一设定的子数组中,最短的是多长? 福大大 答案2021-05-12: 从左往右遍历,缓存 ...

  7. for循环原理补充、生成器对象、yield冷门用法、生成器表达式的面试题、常见内置函数

    目录 一.for循环原理补充 二.生成器对象 (1).自定义生成器对标range功能(一个参数 两个参数 三个参数 迭代器对象) 三.yield冷门用法 (1).yield与return的对比 四.生 ...

  8. ES 数据没了?谁动了我的数据?

    背景 我们在使用 Elasticsearch 的时候,可能会遇到数据"丢"了的情况.有可能是数据没成功写入 ES 集群,也可能是数据被误删了. 针对数据被误删,有没有好的解决办法呢 ...

  9. 计算机网络 ACL和ANT

    目录 一.ACL概况 二.ACL工作过程 三.ACL实验 四.ANT概况 五.ANT工作过程 六.ANT实验 一.ACL概况 概念:主要是对报文进行区分,路由器会对报文进行检查,查看是否符合通过标准或 ...

  10. 如何在.net6webapi中配置Jwt实现鉴权验证

    JWT(Json Web Token) jwt是一种用于身份验证的开放标准,他可以在网络之间传递信息,jwt由三部分组成:头部,载荷,签名.头部包含了令牌的类型和加密算法,载荷包含了用户的信息,签名则 ...