《Python》NumPy——快速处理数据

NumPy是Python科学计算的核心库,提供ndarray对象和ufunc功能,实现了快速处理数据的能力。ndarray是存储单一数据类型的多维数组,ufunc则为数组提供了高效的数学运算。本文详细介绍了如何创建和操作一维、多维数组,包括数组的存取、内存结构,以及ufunc的广播、reduce和accumulate方法。通过实例展示了NumPy在文件存取和矩阵运算中的应用。
摘要由CSDN通过智能技术生成

NumPy——快速处理数据


    标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。
    此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。
    NumPy的诞生弥补了这些不足,NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(下文统一称之为数组)是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。


一、ndarray对象

函数库的导入
推荐以下方式导入NumPy函数库:
import numpy as np

1. 一维数组
1.1 通过Python序列创建一维数组

我们可以通过给array函数传递Python的序列对象创建一维数组。

array函数创建一维数组实例:

a = np.array([1, 2, 3, 4])

图一

  • shape属性的使用:
    数组的大小可以通过其shape属性获得,数组c的shape有两个元素,因此它是二维数组,其中第0轴的长度为3,第1轴的长度为4。还可以通过修改数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度。下面的例子将数组c的shape改为(4,3),注意从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的位置并没有改变。

shape属性使用 实例1:

c.shape = 4,3

图三
    当某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度,因此下面的程序将数组c的shape改为了(2,6)。

shape属性使用 实例2:

c.shape = 2,-1

图三

  • reshape方法的使用:
    使用数组的reshape方法,可以创建一个改变了尺寸的新数组,原数组的shape保持不变。

reshape方法使用实例:
我对数组“a”进行尺寸改变得到一个新的数组d,再对比a和d。

d = a.reshape((2,2))

图四

1.2 通过NumPy函数创建一维数组

    上面的例子都是先创建一个Python序列,然后通过array函数将其转换为数组,这样做显然效率不高。因此NumPy提供了很多专门用来创建数组的函数。

  • arange函数:
    arange函数类似于python的range函数,通过指定开始值、终值和步长来创建一维数组,注意数组不包括终值。

arange函数使用实例:

 np.arange(0,1,0.1) #arrange(始值,终值,步长)

图一

  • linspace函数:
    linspace函数通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包括终值,缺省设置是包括终值。

linspace函数使用实例:

np.linspace(0, 1, 12)   # linspace(始值,终值,元素个数)

图二

  • logspace函数:
    logspace函数和linspace类似,不过它创建等比数列,下面的例子产生1(100)到100(102)、
    有20个元素的等比数列。
2. 多维数组

    多维数组的存取和一维数组类似,因为多维数组有多个轴,因此它的下标需要用多个值来表示,NumPy采用组元(tuple)作为数组的下标。组元不需要圆括号,虽然我们经常在Python中用圆括号将组元括起来,但是实际上组元的语法定义只需要用逗号隔开即可。

2.1 通过给array函数传递Python多层嵌套的序列创建多维数组

array函数创建二维数组实例:

c = np
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值