23_Python列表和数组以及numpy.ndarray的区别和正确使用
Python在标准库中有一个内置类型的列表列表和一个数组数组。您也可以通过安装数值计算库NumPy使用多维数组numpy.ndarray。
将解释它们各自的区别和正确使用。
- 列表 - list
- 数组 - array
- 多维数组 - numpy.ndarray
列表与数组和numpy.ndarray之间的区别
列表 - list
- 内置式:无需导入即可使用
- 可以存储不同类型:也可以通过列表表示多维数组
- 尽管从狭义上讲它可能不同于数组,但列表通常足以进行简单的类似数组的处理。
l = ['apple', 100, 0.123]
print(l)
# ['apple', 100, 0.123]
l_2d = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
print(l_2d)
# [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
提取元素时,请使用[]指定位置(index)。
print(l[1])
# 100
print(l_2d[1])
# [3, 4, 5]
print(l_2d[1][1])
# 4
可以指定多个切片[:]。
print(l[:2])
# ['apple', 100]
使用内置函数max(),min(),sum(),len()计算最大值,最小值,总计,平均值等的示例。 len()是一个返回元素数的函数。
l_num = [0, 10, 20, 30]
print(min(l_num))
# 0
print(max(l_num))
# 30
print(sum(l_num))
# 60
print(sum(l_num) / len(l_num))
# 15.0
for语句进行循环处理的示例。
l_str = ['apple', 'orange', 'banana']
for s in l_str:
print(s)
# apple
# orange
# banana
数组 - array
- 导入并使用标准库的数组模块
- 只能存储相同类型
- 仅一维数组
- 可以使用与列表相同的方式来处理它,但对类型有限制。
与类型代码不匹配的类型的元素无法存储。
import array
arr_int = array.array('i', [0, 1, 2])
print(arr_int)
# array('i', [0, 1, 2])
arr_float = array.array('f', [0.0, 0.1, 0.2])
print(arr_float)
# array('f', [0.0, 0.10000000149011612, 0.20000000298023224])
# arr_int = array.array('i', [0, 0.1, 2])
# TypeError: integer argument expected, got float
与列表相同的处理是可能的。
print(arr_int[1])
# 1
print(sum(arr_int))
# 3
多维数组 - numpy.ndarray
- 安装和使用Numpy
- 只能存储相同类型
- 可以表示多维数组
- 丰富的数值计算方法和功能,可实现高速计算
import numpy as np
arr = np.array([0, 1, 2])
print(arr)
# [0 1 2]
arr_2d = np.array([[0, 1, 2], [3, 4, 5]])
print(arr_2d)
# [[0 1 2]
# [3 4 5]]
对于多维数组,请指定以逗号分隔的位置(索引)。也可以使用切片。
print(arr[1])
# 1
print(arr_2d[1, 1])
# 4
print(arr_2d[0, 1:])
# [1 2]
可以对每个元素(例如,平方根)执行操作或查找矩阵乘积。 打印(np.sqrt(arr_2d))
print(np.sqrt(arr_2d))
# [[0. 1. 1.41421356]
# [1.73205081 2. 2.23606798]]
arr_1 = np.array([[1, 2], [3, 4]])
arr_2 = np.array([[1, 2, 3], [4, 5, 6]])
print(np.dot(arr_1, arr_2))
# [[ 9 12 15]
# [19 26 33]]
- nd表示N维(N-dimensional)。