python中list、array、matrix之间的基本区别

本文介绍了Python科学计算中常用的数据结构,包括列表(list)、多维数组(np.ndarray)和矩阵(np.matrix)的区别。重点讲解了NumPy包的核心对象——多维数组(ndarray)的特点及其在大规模数据处理中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python科学计算包的基础是numpy, 里面的array类型经常遇到. 一开始可能把这个array和python内建的列表(list)混淆, 这里简单总结一下列表(list), 多维数组(np.ndarray)和矩阵(np.matrix)的区别.
####numpy
NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(通常是元素是数字)。在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank,但是和线性代数中的秩不是一样的,在用python求线代中的秩中,我们用numpy包中的linalg.matrix_rank方法计算矩阵的秩
l#####ist列表

列表属于python的三种基本集合类型之一, 其他两种是元组(tuple)和字典(dict). tuple和list区别主要在于是不是mutable的.

list和java里的数组不同之处在于, python的list可以包含任意类型的对象, 一个list里可以包含int, string或者其他任何对象, 另外list是可变长度的(list有append, extend和pop等方法).

所以, python内建的所谓"列表"其实是功能很强大的数组, 类比一下可以说它对应于java里面的ArrayList .

#####ndarray多维数组

ndarray是numpy的基石, 其实它更像一个java里面的标准数组: 所有元素有一个相同数据类型(dtype), 不过大小不是固定的.

ndarray对于大计算量的性能非常好, 所以list要做运算的时候一定要先转为array(np.array(a_list)).

ndarray带有一些非常实用的函数, 列举几个常用的: sum, cumsum, argmax, reshape, T, …

ndarray有fancy indexing, 非常实用, 比如: a[a>3] 返回数组里大于3的元素

ndarray之间的乘法: 如果用乘法运算符的话, 返回的是每个位置元素相乘(类似matlab里面的.), 想要矩阵相乘需要用dot().

常见矩阵的生成: ones, zeros, eye, diag, …

#####matrix矩阵

matrix是ndarray的子类, 所以前面ndarray那些优点都保留了.

同时, matrix全部都是二维的, 并且加入了一些更符合直觉的函数, 比如对于matrix对象而言, 乘号运算符得到的是矩阵乘法的结果. 另外mat.I就是逆矩阵…

不过应用最多的还是ndarray类型.

微信号
参考资料: http://docs.scipy.org/doc/numpy/reference/index.html http://math.mad.free.fr/depot/numpy/base.html http://stackoverflow.com/questions/4151128/what-are-the-differences-between-numpy-arrays-and-matrices-which-one-should-i-u
### Python 中 `matrix[i][::-1]` 的用法解释 在 Python 中,`matrix[i][::-1]` 是一种列表切片操作,用于反转指定行的内容。以下是具体说明: #### 列表切片基础 Python 的切片语法允许通过 `[start:end:step]` 来提取子序列。其中: - `start` 表示起始索引(默认为 0)。 - `end` 表示结束索引(不包含该位置,默认为列表长度)。 - `step` 表示步长,当其为负数时会反向取值。 对于 `[::-1]` 这种形式,省略了 `start` `end`,而将 `step` 设置为 `-1`,表示从最后一个元素到第一个元素依次取出整个列表并返回一个新的逆序列表[^4]。 #### 应用于二维矩阵 假设有一个二维矩阵 `matrix`,如下所示: ```python matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] ``` 如果执行 `matrix[i][::-1]`,则会对第 `i` 行的元素进行反转。例如: ```python row_reversed = matrix[1][::-1] # 对第二行进行反转 print(row_reversed) # 输出 [6, 5, 4] ``` 这里的逻辑分解为两部分: 1. `matrix[i]` 获取矩阵中第 `i` 行的一维列表。 2. 使用切片 `[::-1]` 将这一维列表中的元素顺序颠倒。 因此,最终的结果是对目标行进行了水平翻转操作。 --- ### 示例代码 以下是一个完整的例子来展示这种用法的实际效果: ```python import numpy as np # 创建一个简单的二维数组 matrix = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]) # 反转每一行 reversed_rows = [row[::-1] for row in matrix] # 打印原始矩阵反转后的结果 print("Original Matrix:") print(matrix) print("\nReversed Rows:") for i, reversed_row in enumerate(reversed_rows): print(f"Row {i}: {list(reversed_row)}") ``` 运行以上代码后,输出将是: ``` Original Matrix: [[1 2 3] [4 5 6] [7 8 9]] Reversed Rows: Row 0: [3, 2, 1] Row 1: [6, 5, 4] Row 2: [9, 8, 7] ``` 此方法不仅适用于 NumPy 数组,也完全兼容普通的嵌套列表结构[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界的小小小学生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值