Python科学计算:用NumPy快速处理数据

简介: Python科学计算:用NumPy快速处理数据

NumPy是Python 中一个非常重要的第三方库

它不仅是 Python 中使用最多的第三方库,而且还是 SciPy、Pandas 等数据科学的基础 库。它所提供的数据结构比 Python 自身的“更高级、更高效”,可以这么说,NumPy 所 提供的数据结构是 Python 数据分析的基础。

使用 NumPy 让你的 Python 科学计算更高效

为什么要用 NumPy 数组结构而不是 Python 本身的列表 list?这是因为列表 list 的元素在 系统内存中是分散存储的,而 NumPy 数组存储在一个均匀连续的内存块中。这样数组计 算遍历所有的元素,不像列表 list 还需要对内存地址进行查找,从而节省了计算资源。另外在内存访问模式中,缓存会直接把字节块从 RAM 加载到 CPU 寄存器中。因为数据连 续的存储在内存中,NumPy 直接利用现代 CPU 的矢量化指令计算,加载寄存器中的多个 连续浮点数。另外 NumPy 中的矩阵计算可以采用多线程的方式,充分利用多核 CPU 计算资源,大大提升了计算效率。

当然除了使用 NumPy 外,你还需要一些技巧来提升内存和提高计算资源的利用率。一个 重要的规则就是:避免采用隐式拷贝,而是采用就地操作的方式。举个例子,如果我想让一 个数值 x 是原来的两倍,可以直接写成 x*=2,而不要写成 y=x*2。这样速度能快到 2 倍甚至更多。

import numpy as np
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b[1,1]=10

 

numpy 中的字符编码来表示数据类型的定义,比如 i 代表整数,f 代表 单精度浮点数,S 代表字符串,S32 代表的是 32 个字符的字符串

##通过函数 shape 属性获得数组的大小,通过 dtype获得元素的属性。
print(a.shape)
print(b.shape)
print(a.dtype)
print(b)

 

# np.arange 和 np.linspace 起到的作用是一样的,都是创建等差数组。这两个数组的结果x1,x2
# 都是 [1 3 5 7 9]。结果相同,但是你能看出来创建的方式是不同的。
x1 = np.arange(1,11,2)
x2 = np.linspace(1,9,5)
print (x1)
print (x2)
#  通过 NumPy 可以自由地创建等差数组,同时也可以进行加、减、乘、除、求 n 次方和取余数。
print (np.add(x1, x2))
print (np.subtract(x1, x2))
print (np.multiply(x1, x2))
print (np.divide(x1, x2))
print (np.power(x1, x2))
print (np.remainder(x1, x2))

 

# 计数组 / 矩阵中的最大值函数 amax(),最小值函数 amin()
# amin() 用于计算数组中的元素沿指定轴的最小值。对于一个二维数组 a,amin(a) 指的是
# 数组中全部元素的最小值,amin(a,0) 是延着 axis=0 轴的最小值,axis=0 轴是把元素看成
# 了 [1,4,7], [2,5,8], [3,6,9] 三个元素,所以最小值为 [1,2,3],amin(a,1) 是延着 axis=1 轴
# 的最小值,axis=1 轴是把元素看成了 [1,2,3], [4,5,6], [7,8,9] 三个元素,所以最小值为
# [1,4,7]。同理 amax() 是计算数组中元素沿指定轴的最大值。
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print (np.amin(a))
print (np.amin(a,0))
print (np.amin(a,1))
print (np.amax(a))
print (np.amax(a,0))
print (np.amax(a,1))

 

#  统计最大值与最小值之差 ptp()
# 对于相同的数组 a,np.ptp(a) 可以统计数组中最大值与最小值的差,即 9-1=8。同样
# ptp(a,0) 统计的是沿着 axis=0 轴的最大值与最小值之差,即 7-1=6(当然 8-2=6,9-
# 3=6,第三行减去第一行的 ptp 差均为 6),ptp(a,1) 统计的是沿着 axis=1 轴的最大值与
# 最小值之差,即 3-1=2(当然 6-4=2, 9-7=2,即第三列与第一列的 ptp 差均为 2)
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print (np.ptp(a))
print (np.ptp(a,0))
print (np.ptp(a,1))
# 统计数组的百分位数 percentile()
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print (np.percentile(a, 50))
print (np.percentile(a, 50, axis=0))
print (np.percentile(a, 50, axis=1))

 

# 统计数组中的中位数 median()、平均数 mean()
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
# 求中位数
print (np.median(a))
print (np.median(a, axis=0))
print (np.median(a, axis=1))
# 求平均数
print (np.mean(a))
print (np.mean(a, axis=0))
print (np.mean(a, axis=1))

 

# 统计数组中的加权平均值 average()
a = np.array([1,2,3,4])
wts = np.array([1,2,3,4])
print (np.average(a))
print (np.average(a,weights=wts))

 

#  统计数组中的标准差 std()、方差 var()
a = np.array([1,2,3,4])
print (np.std(a))
print (np.var(a))

 

# sort(a, axis=-1, kind=‘quicksort’, order=None),默认情况下使用
# 的是快速排序;在 kind 里,可以指定 quicksort、mergesort、heapsort 分别表示快速排
# 序、合并排序、堆排序。同样 axis 默认是 -1,即沿着数组的最后一个轴进行排序,也可以
# 取不同的 axis 轴,或者 axis=None 代表采用扁平化的方式作为一个向量进行排序。另外
# order 字段,对于结构化的数组可以指定按照某个字段进行排序。
a = np.array([[4,3,2],[2,4,1]])
print (np.sort(a))
print (np.sort(a, axis=None))
print (np.sort(a, axis=0))
print (np.sort(a, axis=1))


目录
相关文章
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
2月前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
2月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
305 10
|
3月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
92 3
|
3月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
154 0
|
3月前
|
数据采集 存储 分布式计算
超酷炫Python技术:交通数据的多维度分析
超酷炫Python技术:交通数据的多维度分析

热门文章

最新文章

推荐镜像

更多