📜  Python中的数组|第二套(重要功能)(1)

📅  最后修改于: 2023-12-03 15:04:36.523000             🧑  作者: Mango

Python中的数组|第二套(重要功能)

在Python中,列表(list)是最常用的数组类型。但有些情况需要更高效的数组结构,这就要用到array模块和numpy库了。

array模块

Python的内置array模块提供了一种基本的数组结构,它可以在存储和访问元素时比普通的list更加高效。

定义数组

使用array模块定义数组,需要指定元素的类型。常用的类型有'b'(有符号字节型)、'B'(无符号字节型)、'i'(有符号整型)、'I'(无符号整型)、'f'(浮点型)等等。

import array

# 定义一个整型数组
a = array.array('i', [1, 2, 3, 4, 5])
数组操作

array模块提供了一些操作数组的方法,比如:

  • append():在数组末尾添加元素
  • extend():在数组末尾追加另一个数组
  • insert(i,x):在指定位置插入元素
  • pop([i]):删除并返回指定位置的元素。如果没有指定位置,将删除并返回数组的最后一个元素
  • remove(x):删除数组中第一个值为x的元素
  • index(x):返回数组中第一个值为x的元素的索引
  • count(x):返回值为x的元素在数组中出现的次数
  • reverse():反转数组
  • sort():对数组进行升序排序
import array

# 定义一个整型数组
a = array.array('i', [1, 2, 3, 4, 5])
print(a) # array('i', [1, 2, 3, 4, 5])

# append()方法在数组末尾添加元素
a.append(6)
print(a) # array('i', [1, 2, 3, 4, 5, 6])

# extend()方法在数组末尾追加另一个数组
a.extend([7, 8, 9])
print(a) # array('i', [1, 2, 3, 4, 5, 6, 7, 8, 9])

# insert()方法在指定位置插入元素
a.insert(0,0)
print(a) # array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# pop()方法删除并返回指定位置的元素
a.pop(0)
print(a) # array('i', [1, 2, 3, 4, 5, 6, 7, 8, 9])

# remove()方法删除数组中第一个值为x的元素
a.remove(9)
print(a) # array('i', [1, 2, 3, 4, 5, 6, 7, 8])

# index()方法返回数组中第一个值为x的元素的索引
print(a.index(5)) # 4

# count()方法返回值为x的元素在数组中出现的次数
print(a.count(5)) # 1

# reverse()方法反转数组
a.reverse()
print(a) # array('i', [8, 7, 6, 5, 4, 3, 2, 1])

# sort()方法对数组进行升序排序
a.sort()
print(a) # array('i', [1, 2, 3, 4, 5, 6, 7, 8])
numpy库

numpy库提供了一个更强大的数组结构ndarray,它比array模块的数组拥有更多的功能和更高的性能。

安装numpy

使用pip安装numpy

pip install numpy
定义数组

使用numpy库,我们可以使用array()函数来定义数组。函数的第一个参数是数组元素列表,第二个参数是数组元素类型。

import numpy as np

# 定义一个整型数组
a = np.array([1, 2, 3, 4, 5])
print(a) # [1 2 3 4 5]

# 定义一个浮点型数组
b = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
print(b) # [1. 2. 3. 4. 5.]
数组属性

numpy数组有一些属性,可以用于获取有关数组的信息,比如数组的 shape、dtype、size、ndim 等等。

import numpy as np

# 定义一个整型数组
a = np.array([1, 2, 3, 4, 5])
print(a.shape) # (5,),返回一个元组,表示数组的形状

# 定义一个二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b.shape) # (2, 3),表示数组有2行3列

# 定义一个浮点型数组
c = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
print(c.dtype) # float64,表示数组中元素的类型

# size属性表示数组元素的总数
print(a.size) # 5
print(b.size) # 6

# ndim属性表示数组的维数
print(a.ndim) # 1
print(b.ndim) # 2
数组计算

numpy数组不仅可以存储数据,还可以进行各种数学运算。这对于科学计算和数据处理非常有用。以下是一些常见的数组运算。

数组加、减、乘、除

import numpy as np

a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])

# 数组加
print(a + b) # [ 6  8 10 12]

# 数组减
print(a - b) # [-4 -4 -4 -4]

# 数组乘
print(a * b) # [ 5 12 21 32]

# 数组除
print(a / b) # [0.2        0.33333333 0.42857143 0.5       ]

数组的平方、开方、对数运算

import numpy as np

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

# 数组平方
print(np.square(a)) # [ 1  4  9 16]

# 数组开方
print(np.sqrt(a)) # [1.         1.41421356 1.73205081 2.        ]

# 数组对数运算
print(np.log(a)) # [0.         0.69314718 1.09861229 1.38629436]

数组的三角函数

numpy库提供了很多常见的三角函数,比如sin、cos、tan等等。

import numpy as np
import math

# 定义一个角度数组
x = np.array([0, math.pi/2, math.pi])

# 计算三角函数
print(np.sin(x)) # [0.0000000e+00 1.0000000e+00 1.2246468e-16]
print(np.cos(x)) # [ 1.000000e+00  6.123234e-17 -1.000000e+00]
print(np.tan(x)) # [ 0.00000000e+00  1.63312394e+16 -1.22464680e-16]
数组切片

numpy数组也可以像Python的列表一样进行切片操作,但是它提供了更多的切片选项。

import numpy as np

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 对数组进行切片,获取前5个元素
print(a[:5]) # [1 2 3 4 5]

# 对数组进行切片,获取从第3个元素到第8个元素
print(a[2:8]) # [3 4 5 6 7 8]

# 对数组进行切片,获取2到末尾的所有元素,步长为2
print(a[1::2]) # [2 4 6 8]

# 对多维数组进行切片
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 获取第一行
print(b[0, :]) # [1 2 3]

# 获取第一列
print(b[:, 0]) # [1 4 7]

# 获取左上方的2x2子矩阵
print(b[:2, :2]) # [[1 2] [4 5]]
广播功能

广播是Numpy中重要的特征,它使得在执行算术运算时,数组的形状可以不同。当数组形状不同时,Numpy会尝试将它们广播为相同的形状,以便进行计算。

import numpy as np

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

# 广播b,将其转换成[[10,20,30], [10,20,30], [10,20,30]]的形状
c = a + b
print(c)
""" 输出结果
[[11 22 33]
 [14 25 36]
 [17 28 39]]
"""
总结

array模块和numpy库提供了两种不同的数组结构。如果我们只是需要一个普通的数组,可以使用array模块;而如果需要一些高级的功能,比如计算、切片、广播等等,就需要使用numpy库。

不管你用哪种数组,使用它们时,我们需要注意数组的类型和形状,因为它们会影响到数组的性能和行为。同时,我们还需要了解一些基本的数组操作和计算,以便更好地使用数组。