首页 > 其他分享 >numpy之002 优势

numpy之002 优势

时间:2023-12-10 12:11:42浏览次数:30  
标签:Python numpy list 002 优势 数组 time NumPy ndarray

对比

通过⼀段代码运⾏来体会ndarray与Python原⽣list运算效率对⽐。

import random
import numpy as np
import time

# 创建包含随机数的列表
a = []
for i in range(1000000):  # 我减小了迭代次数以避免内存问题
    a.append(random.randint(1, 100))  # 生成1到100之间的随机数

# 使用Python内置的sum函数计算列表的总和
start_time = time.time()
sum1 = sum(a)
end_time = time.time()
execution_time = end_time - start_time
print(f"Python list求和执行时间: {execution_time} 秒")

# 将列表转换为NumPy数组
b = np.array(a)

# 使用NumPy的sum函数计算数组的总和
start_time = time.time()
sum2 = np.sum(b)  # 使用np.sum而不是内置的sum
end_time = time.time()
execution_time = end_time - start_time
print(f"NumPy数组求和执行时间: {execution_time} 秒")

 从示例上看numpy比原生list要快,其内存模型对比:

 

从图中我们可以看出ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快。
这是因为ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。

ndarray的优势【掌握】
  内存块风格
    list -- 分离式存储,存储内容多样化
    ndarray -- 一体式存储,存储类型必须一样
  ndarray支持并行化运算(向量化运算)
  ndarray底层是用C语言写的,效率更高,释放了GIL

总结

1. 高效的数组计算:NumPy的ndarray被设计用于高效的数值计算。它们可以比Python的内建数据结构快很多倍,尤其是在进行大规模数据操作时。

import numpy as np

# 创建两个大型数组
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
b = np.array([10, 9, 8, 7, 6, 5, 4, 3, 2, 1])

# 数组加法
c = a + b
print(c)

 2. 内存效率:ndarray在存储和处理数据时非常节省内存。数组中的元素使用相同的数据类型(具有固定大小),这意味着它们在内存中紧密排列,这种存储方式比Python的列表等数据结构更为高效。

3. 矢量化操作:NumPy允许你对ndarray执行矢量化操作,而不是使用循环。例如,你可以一次性对整个数组进行加法或乘法等操作,这样可以显著提高代码的性能和可读性。

 4. 广播能力:NumPy的广播规则允许执行不同形状数组之间的算术运算,这在纯Python操作中是无法做到的。

 5. 集成C/C++/Fortran代码的能力:NumPy可以很容易地与C、C++或Fortran等语言编写的代码集成。这意味着如果算法不能通过NumPy本身高效实现,可以用这些语言编写,然后在Python中调用。

 

6. 丰富的函数库:NumPy提供了大量的数学函数用于快速操作ndarray,包括数学运算、逻辑运算、形状操作、排序、选择、I/O操作、离散傅里叶变换、基本线性代数、基本统计运算等。

 7. 灵活的索引和切片:ndarray支持多种索引方式,包括基本的索引、切片、高级索引等,这使得数据操作更加灵活和强大。

 8. 多维数组处理能力:NumPy能够处理任意维度的数组,而不仅仅是1D或2D数组,这使其在科学计算中特别有用。

 

9. 与其他Python科学计算库的集成:NumPy是SciPy、Pandas、Matplotlib、scikit-learn等流行科学计算库的基础,这些库依赖于NumPy的数组以及其它功能。

综上所述,ndarray的这些优势使其在科学计算、数据分析、机器学习等领域中发挥着重要作用。

标签:Python,numpy,list,002,优势,数组,time,NumPy,ndarray
From: https://www.cnblogs.com/allenxx/p/17892366.html

相关文章

  • Numpy之001 Numpy简介
    简介Numpy(NumericalPython)是⼀个开源的Python科学计算库,⽤于快速处理任意维度数组的工具。Numpy⽀持常⻅的数组和矩阵操作。对于同样的数值计算任务,使⽤Numpy⽐直接使⽤Python要简洁的多,性能好Numpy使⽤ndarray对象来处理多维数组,该对象是⼀个快速⽽灵活的⼤数据容器。 nda......
  • Python NumPy 合并数组和分割数组
    在Python的NumPy库中,合并和分割数组是两种常用的操作,用于重组和分解数据集。将多个数据集合并为一个数据集,方便进行后续的处理。将数据集拆分为多个子数据集,用于并行处理或分布式处理。将数据集按指定条件进行分组,方便进行分析。1、合并数组合并数组是一种常见操作,允许你......
  • Python NumPy 数组形状操作
    1、获取数组的形状 1、获取数组的形状要获取数组的形状,可以使用 shape 属性。文档:Pythonnumpy.shape函数方法的使用2、改变数组形状要改变数组的形状,可以使用 reshape() 方法。文档:Pythonnumpy.reshape函数方法的使用3、改变数组的大小要改变数组的大小,可以使用 r......
  • app定制开发的关键优势有哪些?这些优势值得关注
    在移动应用行业竞争激烈的今天,越来越多的企业和个人选择app定制开发以满足特定需求。相较于使用通用应用的方式,app定制开发具有独特的优点,本文将深入探讨其中一些关键优势。1.高度定制化APP定制开发的最大优势之一是其高度定制化的能力。通用应用通常是为广泛用户群体设计的,功能和......
  • 静态HTTP和动态HTTP的区别:理解二者的优势和局限
    在互联网的世界里,HTTP(HypertextTransferProtocol)是当之无愧的“交通规则”。它负责在浏览器和服务器之间传输数据,让你可以在网页上浏览、互动和下载内容。根据动态和静态的不同,HTTP网站可以分为静态HTTP网站和动态HTTP网站。这两种类型网站都有其特定的优势和局限。静态HTTP网站:......
  • Python NumPy 数组索引和切片
    1、普通索引普通索引是指使用单个整数或整数列表来索引数组中的元素。1)单个元素索引要访问NumPy数组的单个元素,可以使用单个整数索引。索引从0开始,表示数组的第一行第一个元素。2)多维元素索引2、高级索引高级索引允许使用布尔值或数组来索引数组中的元素。1)布尔索引布......
  • CC2530F256RHAR和zigbee的关系 芯片特点介绍和优势
    ZigBee新一代SOC芯片CC2530是真正的片上系统解决方案,支持IEEE802.15.4标准/ZigBee/ZigBeeRF4CE和能源的应用。拥有庞大的快闪记忆体多达256个字节,CC2530是理想ZigBee专业应用。支持新Remoti的ZigBeeRF4CE,这是业界首款符合ZigBeeRF4CE兼容的协议栈,和更大内存大小将允许芯片无线下......
  • 深入了解UUID:生成、应用与优势
    一、引言在当今数字化时代,唯一标识一个对象的能力变得越来越重要。UUID(UniversallyUniqueIdentifier,通用唯一标识符)应运而生,作为一种保证全球唯一性的标识方法,广泛应用于各种场景。本文将详细介绍UUID的生成方法、应用场景及其优势。UUID/GUID生成器--一个覆盖广泛主题......
  • 固态硬盘的优势是什么?
    固态硬盘的优势是什么?1、重量轻体积小。固态硬盘相比机械硬盘在体积上更小,重量更轻。一般来说,台式机的机械硬盘的尺寸在3.5英寸,而SATA接口的固态硬盘的尺寸仅有2.5英寸,而M.2接口的固态硬盘体积更小,只有U盘的大小。2、静音。由于固态硬盘没有机械马达,类似于U盘,因此在固态硬盘工作......
  • 固态硬盘的优势是什么?
    固态硬盘的优势是什么?1、重量轻体积小。固态硬盘相比机械硬盘在体积上更小,重量更轻。一般来说,台式机的机械硬盘的尺寸在3.5英寸,而SATA接口的固态硬盘的尺寸仅有2.5英寸,而M.2接口的固态硬盘体积更小,只有U盘的大小。2、静音。由于固态硬盘没有机械马达,类似于U盘,因此在固态硬盘工作......