Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据分析之numpy

数据分析之numpy

作者头像
Python疯子
发布于 2018-09-06 08:18:50
发布于 2018-09-06 08:18:50
1.4K00
代码可运行
举报
文章被收录于专栏:Python疯子Python疯子
运行总次数:0
代码可运行

ndarray概述 创建n维数组 接收的是列表类型,所有元素类型必须相同 shape表示各维度大小的元组 dtype表示数组数据类型对象

1、基本创建数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ndarray1 = np.array([1, 2, 3, 4])
ndarray2 = np.array(list('abcdefg'))
ndarray3 = np.array([[11, 22, 33, 44], [10, 20, 30, 40]])

# 输出整个数组
print(ndarray3)
# 输出数组元素类型
print(ndarray3.dtype)
# 输出数组类型 mxn
print(np.shape(ndarray3))
# 输出数组指定元素
print(ndarray3[1][2])
  1. zeros和zeros_like创建全0数组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ndarray4 = np.zeros(10)
ndarray5 = np.zeros((3, 3))
ndarray6 = np.zeros_like(ndarray3)  # 按照 ndarray3 的shape创建数组
  1. ones和ones_like创建全1数组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建数组,元素默认值是1
ndarray7 = np.ones(10)
ndarray8 = np.ones((3, 3))
# 修改元素的值
ndarray8[0][1] = 999
ndarray9 = np.ones_like(ndarray5)  # 按照 ndarray5 的shape创建数组
  1. empty和empty_like创建空数组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
用于创建空数组,空数据中的值并不为0,而是未初始化的随机值.
ndarray10 = np.empty(5)
ndarray11 = np.empty((2, 3))
ndarray12 = np.empty_like(ndarray11)
  1. arange创建数组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 产生0-910个元素
ndarray13 = np.arange(10)
# 产生从10-1910个元素
ndarray14 = np.arange(10, 20)
# 产生10 12 14 16 18, 2为step
ndarray15 = np.arange(10, 20, 2)
# 将其形状改变为(2, 5)
ndarray14.reshape((2, 5))
  1. eys创建对角矩阵数组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 该函数用于创建一个N*N的矩阵,对角线为1,其余为0.
ndarray16 = np.eye(5)

使用astype函数转换数组类型 如果浮点数转换为整数,则小数部分将会被截断 -- 取整 如果某些字符串数组表示的全是数字,也可以用astype将其转换为数值类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ndarray19 = np.array([2.4, 3.6, 4.8])
ndarray20 = ndarray19.astype(np.int64)

2.3 数组运算 不需要循环即可对数据进行批量运算,叫做矢量化运算. 不同形状的数组之间的算数运算,叫做广播.

数组 + 数组 对应元素相加 数组 + 数字 分别相加,相乘,相除 一维 + 多维 按行分别相加 每行的元素个数相同 多维 + 多维 对应元素分别相加 多维 * 多维 形状相同对应元素分别相乘 (注意这里不是矩阵乘法) 矩阵乘法:条件--第一个行数 == 第二个的列数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr14 = np.dot(arr6, arr12)

多维矩阵相乘.png

主要操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr = np.array(np.arange(24).reshape(6,4))
# print(arr)
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]
'''

元素类型转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr2 = arr.astype(np.float32)
 print(arr2)

数组转置 transpose 行变列,列变行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr3 = arr.transpose()
print(arr3)

返回bool值,可以添加axis参数指定轴方向

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
np.any(): 至少有一个元素满足指定条件,返回True
np.all(): 所有的元素满足指定条件,返回True
arr2 = np.any(arr > 20)
 print(arr2)

取行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
取下标行 arr[n]      print(arr[2])
取连续行 arr[m:n]    print(arr[1:3])
只取指定行            arr[[1,3,4]]  两个中括号 

取列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
获取指定下标的列  print(arr[:, 3]) # 一维数组形式
print(arr[:, 3:4]) # 以真实的列展示(竖着)
获取指定范围列 arr[:, 1:3] # print(arr[:, 1:3])
获取多个指定下标列 arr[:, [0,2]]  # print(arr[:, [0,2]])

获取指定连续行的指定连续列 arr[0:2 , 1:3]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(arr[0:2 , 1:3])

获取不连续的行和列 前面是行 后面是列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr2 = arr[np.ix_([0,2], [0,3])]

获取下标元素放入列表中[ 6, 11]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(arr[[1,2], [2,3]])

判断列表是否为空

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# if np.size(arr) != 0:
# print(f"数组大小为{np.size(arr)}")

拼接两数组 行拼接 在下面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr1 = arr[0:2]
arr2 = arr[[4,5]]
newArr = np.vstack((arr1, arr2))
print(newArr)

列拼接 在后面拼接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr1 = arr[0:2]
arr2 = arr[[4,5]]
newArr = np.hstack((arr1, arr2))
print(newArr)

分别获取每行或每列的总和 axis=0 表示列 axis=1 表示行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 平均值 mean
arr4 = np.sum(arr, axis=0)
print(arr4)

# 第n列的sum
print(np.sum(arr[:, 2]))

reshape(6,4) 查看数组大小 返回元祖
print(arr.shape)

按列均分为n份 注意 均分后的值必须是正整数,不能有小数,也就是总行数/要均分的份数,能整除

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vsplit(arr, n) 按行均分为n份 ,返回列表  可通过下标获取
ret = np.hsplit(arr, 4)
print(ret[2])

排序 axis=0 按列升序排序 axis=1 按行升序排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr2 = np.sort(arr[[4,2,0]], axis=1)
 print(arr2)

怎么降序排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 按列降序     np.sort(arr[::-1])
arr3 = np.sort(arr[::-1])
print(arr3)

按行降序 先将数据变为负数 然后升序排序 np.sort(-arr, axis=1) 再加个符号,把负数变为整数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 array = -np.sort(-arr, axis=1)   #降序
 print(array)

矩阵按其第一列元素大小顺序来对整个矩阵进行行排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr5 = np.array([[5, 4, 6], [3, 6, 3], [9, 4, 1]])
print(arr5)
mat1=arr5[arr5[:,0].argsort()]
print(mat1)

一元ufunc:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ceil(x): 向上最接近的整数,参数是 number 或 ndarray
floor(x): 向下最接近的整数,参数是 number 或 ndarray
rint(x): 四舍五入,参数是 number 或 ndarray
negative(x): 元素取反,参数是 number 或 ndarray
abs(x):元素的绝对值,参数是 number 或 ndarray
square(x):元素的平方,参数是 number 或 ndarray
aqrt(x):元素的平方根,参数是 number 或 ndarray
sign(x):计算各元素的正负号, 1(正数)0(零)、-1(负数),参数是 number 或 ndarray
modf(x):将数组的小数和整数部分以两个独立数组的形式返回,参数是 number 或 ndarray
isnan(x): 判断元素是否为 NaN(Not a Number),返回bool,参数是 number 或 ndarray

二元ufunc:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add(x, y): 元素相加,x + y,参数是 number 或 ndarray
subtract(x, y): 元素相减,x - y,参数是 number 或 ndarray
multiply(x, y): 元素相乘,x * y,参数是 number 或 ndarray
divide(x, y): 元素相除,x / y,参数是 number 或 ndarray
floor_divide(x, y): 元素相除取整数商(丢弃余数),x // y,参数是 number 或 ndarray
mod(x, y): 元素求余数,x % y,参数是 number 或 array
power(x, y): 元素求次方,x ** y,参数是 number 或 array

三元ufunc:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
where(condition, x, y): 三元运算符,x if condition else y,条件满足返回x,否则返回y,
参数condition 是条件语句,参数 x 和 y 是 number 或 ndarray

按下标依次迭代arr1和arr2两个数组的每个元素,并比较元素大小,如果结果为True,返回当前arr1的元素,否则返回当前arr2的元素,并将结果构建为一个数组。
arr3 = np.where(arr1 > arr2, arr1, arr2)
print(arr3)

多维数组默认统计全部数据,添加axis参数可以按指定轴心统计,值为0则按列统计,值为1则按行统计。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
np.mean(x [, axis]):所有元素的平均值,参数是 number 或 ndarray
np.sum(x [, axis]):所有元素的和,参数是 number 或 ndarray
np.max(x [, axis]):所有元素的最大值,参数是 number 或 ndarray
np.min(x [, axis]):所有元素的最小值,参数是 number 或 ndarray
np.std(x [, axis]):所有元素的标准差,参数是 number 或 ndarray
np.var(x [, axis]):所有元素的方差,参数是 number 或 ndarray
np.argmax(x [, axis]):最大值的下标索引值,参数是 number 或 ndarray
np.argmin(x [, axis]):最小值的下标索引值,参数是 number 或 ndarray
np.cumsum(x [, axis]):返回一个一维数组,每个元素都是之前所有元素的 累加和,参数是 number 或 ndarray
np.cumprod(x [, axis]):返回一个一维数组,每个元素都是之前所有元素的 累乘积,参数是 number 或 ndarray

ndarray支持常用的增加和删除操作,以及数组合并。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
append():在数组后面追加元素
insert():在指定下标插入元素
delete():删除指定行/列数据
concatenate((arr1, arr2, ...), axis=0):合并多个数组

unique(x)         :去重,并返回有序结果.
intersect1d(x, y) :公共元素,并返回有序结果, x & y
union1d(x, y)     :计算x和y的并集,并返回有序结果, x | y
setdiff1d(x, y)   :集合的差,即元素在x中且不在y中. x - y, y - x
in1d(x, y)        :得到一个表示“x的元素是否包含于y”的布尔型数组.
setxor1d(x, y)    :对称差集,两个数组中互相不包含的元素。x ^ y

arr2 = np.array([1, 3, 2])
arr3 = np.array(["l", "o", "u", "d", "b"])
arr4 = np.unique(arr2)
print(arr4)

arr5 = np.multiply(arr2, arr3)
 print(arr5)

数组中每一个元素都进行==运算,返回一个数组,如果相等返回True 不等返回False

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
names = np.array(['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg'])
mask = names == "aaa"
# [ True False False False False False False]

使用numpy提供的where函数 三目运算符 如果符合条件 结果为值1 否则为值2 将结果添加到数组中 使用格式为: result = np.where(条件, 值1, 值2)

元素替换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 将大于20的元素替换成666
ret1 = np.where(ndarray3 > 20, 666, ndarray3)

# 将大于13,并且小于17的元素替换成100
ret2 = np.where(ndarray3 > 13, np.where(ndarray3 < 17, 100, ndarray3), ndarray3)

按条件筛选元素 矩阵名[矩阵名>数值] 对矩阵元素进行筛选,以列表形似返回符合条件的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
newArr= arr[arr>5] # 输出 [6 7 8]
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
博客文章详情页
首页展示的是所有文章的列表,当用户看到感兴趣的文章时,他点击文章的标题或者继续阅读的按钮,应该跳转到文章的详情页面来阅读文章的详细内容。现在让我们来开发博客的详情页面,有了前面的基础,开发流程都是一样的了:首先配置 URL,即把相关的 URL 和视图函数绑定在一起,然后实现视图函数,编写模板并让视图函数渲染模板。 设计文章详情页的 URL 回顾一下我们首页视图的 URL,在 blog\urls.py 文件里,我们写了: blog/urls.py from django.conf.urls import u
追梦人物
2018/04/17
1.5K0
博客文章详情页
Python爬虫,IF奖数据爬虫含完整日志记录系统
最新if奖,2021if奖数据出炉,这里本渣渣继续用python对相关数据进行爬取采集,由于是官方网站,展示用,所以几乎没有任何反爬,当然结余是国外网站,会存在访问超时的错误,综合而言,这无疑是一个比较不错的练手网站,推荐老哥们上手试试,学着玩!
二爷
2021/04/30
4820
Python爬虫,IF奖数据爬虫含完整日志记录系统
H5 App实战二:H5 App的页面结构与导航
这篇文章介绍了 Linux 中磁盘分区的概念、常见分区方案以及具体的操作步骤,并附上相应的代码示例,帮助读者深入理解和实践。整体内容全面,步骤清晰,非常适合读者学习和参考。
china马斯克
2024/11/22
2740
使用Scrapy网络爬虫框架小试牛刀
默认情况下,直接pip install scrapy可能会失败,如果没有换源,加上临时源安装试试,这里使用的是清华源,常见安装问题可以参考这个文章:Windows下安装Scrapy方法及常见安装问题总结——Scrapy安装教程。
Python进阶者
2021/01/12
5370
使用Scrapy网络爬虫框架小试牛刀
利用多线程到电影天堂爬点电影回家慢慢看【python爬虫入门进阶】(05)
已经好久没有更新爬虫类的文章了,从入门到入狱的好技术怎能不好好学习呢。所以,今天我继续来卷了。本文将从实战的角度介绍一个完整的爬虫。这里以妇孺皆知的电影天堂网站为例进行说明。希望读者朋友们能有所启发,有所收获。
码农飞哥
2021/12/07
8500
利用多线程到电影天堂爬点电影回家慢慢看【python爬虫入门进阶】(05)
爬虫入门到精通-爬虫之异步加载(实战花瓣网)
本文章属于爬虫入门到精通系统教程第八讲 本次我们会讲解两个知识点 异步加载 headers中的Accept 本次我们要抓取的是花瓣网美女照片美女花瓣,陪你做生活的设计师(发现、采集你喜欢的美女图片)花瓣网(http://huaban.com/favorite/beauty/) 本次我们会用到的辅助包 scrapy/parsel (https://github.com/scrapy/parsel)(假如你用过scrapy,那么一定不陌生,这就是其中提取器) Parsel is a library to ext
爬虫
2018/04/08
1.4K0
爬虫入门到精通-爬虫之异步加载(实战花瓣网)
第 08 篇:开发博客文章详情页
首页展示的是所有文章的列表,当用户看到感兴趣的文章时,他点击文章的标题或者继续阅读的按钮,应该跳转到文章的详情页面来阅读文章的详细内容。现在让我们来开发博客的详情页面,有了前面的基础,开发流程都是一样的了:首先配置 URL,即把相关的 URL 和视图函数绑定在一起,然后实现视图函数,编写模板并让视图函数渲染模板。
HelloGitHub
2021/05/14
5080
基于Scrapy的东方财富网爬虫
标题中的英文首字母大写比较规范,但在python实际使用中均为小写。 2018年9月6日笔记 IDE(Intergrated development Environment),集成开发环境为jupyter notebook和Pycharm 操作系统:Win10 语言及其版本:python3.6
潇洒坤
2018/09/10
1.7K0
基于Scrapy的东方财富网爬虫
Python爬虫基础
爬虫基础简介 http协议 概念: 服务器和客户端进行数据交互的一种形式 user-Agent: 请求载体的身份表示 Connection : 请求完毕后,是断开连接还是保持连接 Content-Type : 服务器相应客户端的数据类型 # user-Agent ( NetWork-All-Headers ) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638
shaoshaossm
2022/12/26
4250
Python爬虫,pentagram图片及数据采集爬虫
很久没有写爬虫了,随手写了一个爬虫,分享给大家,目标是获取所有图片及数据内容,由于图片存在多张,故简单的采用了多线程来采集下载图片,同时也简单的运用python写入txt构建了一下爬取过程的日志文件,代码写的比较啰嗦,见谅!
二爷
2021/07/05
6430
如何快速爬取新浪新闻并保存到本地
这篇文章能够快速教你爬取新浪新闻。希望这篇文章对您有所帮助!如果您有想学习的知识或建议,可以给作者留言~
不温卜火
2020/10/28
5.9K1
如何快速爬取新浪新闻并保存到本地
Python爬虫,WP站图片PY多线程下载爬虫
一个简单的Python爬虫,适合学习参考练手使用,由于详情页图片较多,故简单的应用了多线程下载图片,目标站点为WordPress程序,按照流程获取都能成功!
二爷
2021/12/02
5280
Python爬虫,WP站图片PY多线程下载爬虫
(二)selenium的实际运用
上一篇我们已经知道怎么简单使用selenium了,那么我们就从这篇博客来动手爬取网站吧。
全栈程序员站长
2021/05/19
6540
手把手教你用Python实现分布式爬虫(四) - scrapy爬取技术文章网站
搭建scrapy的开发环境,本文介绍scrapy的常用命令以及工程目录结构分析,本文中也会详细的讲解xpath和css选择器的使用。然后通过scrapy提供的spider完成所有文章的爬取。然后详细讲解item以及item loader方式完成具体字段的提取后使用scrapy提供的pipeline分别将数据保存到json文件以及mysql数据库中.
JavaEdge
2019/03/25
1.8K0
pyspider使用教程
pyspider 是一个用python实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能定时设置任务与任务优先级等。
Remember_Ray
2021/04/05
3.9K0
百度贴吧 | 通用抓图脚本搞专业爬虫的话,先保证网速够好,再考虑多进程还是多线程~
多进程优势:单个进程的崩溃,不会影响其它进程 随之而来的问题是,进程之间,资源不共享,信息不共享,所以进程通讯的问题,是实现多进程协作,必须解决的问题 为解决进程间的通讯,人们常用的方法是 -
zhaoolee
2018/04/19
8480
百度贴吧 | 通用抓图脚本搞专业爬虫的话,先保证网速够好,再考虑多进程还是多线程~
Selenum获取招聘数据
在这里,Selenium结合lxml来获取51job招聘网站西安地区自动化测试招聘的公司名称,薪资范围,职位要求和招聘的Title,具体实现的思路是访问为:
无涯WuYa
2018/10/24
9690
五、XPath实战:快速定位网页元素
右击鼠标点击检查,我们就会看到具体的URL,为了测试Xpath语法,我们需要打开Xpath插件(本文结尾我会奉上下载链接)
小馒头学Python
2023/11/14
3450
五、XPath实战:快速定位网页元素
Python下载视频的三种姿势
今天和大家分享下我近段时间get的新技能,用单线程、多线程和协程三种方式爬取并下载梨视频的小视频,话不多说,我们开始叭。冲鸭冲鸭!
可以叫我才哥
2021/12/04
2.4K0
Python下载视频的三种姿势
Python分布式爬虫框架Scrapy 打造搜索引擎(四) - 爬取博客网站
搭建scrapy的开发环境,本文介绍scrapy的常用命令以及工程目录结构分析,本文中也会详细的讲解xpath和css选择器的使用。然后通过scrapy提供的spider完成所有文章的爬取。然后详细讲解item以及item loader方式完成具体字段的提取后使用scrapy提供的pipeline分别将数据保存到json文件以及mysql数据库中.
JavaEdge
2022/12/15
1.1K2
Python分布式爬虫框架Scrapy 打造搜索引擎(四) - 爬取博客网站
推荐阅读
相关推荐
博客文章详情页
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验