Python中的列表与Matlab中的向量和矩阵

时间:2017-05-03 07:55:15

标签: python matlab matrix

来自Matlab我甚至无法想到奇异的数据点/变量。我处理的任何东西都是矩阵/数组。经过一周的搜索和错误的试验和错误,我意识到,我绝对不会在(普通)Python中得到处理矩阵的概念。

我创建了

In[]: A = [[1,2,3], [9,8,7], [5,5,5]]
In[]: A
Out[]: [[1, 2, 3], [9, 8, 7], [5, 5, 5]]

尝试沿着两个维度提取矩阵中的向量:

In[]: A[:][1]
Out[]: [9, 8, 7]
In[]: A[1][:]
Out[]: [9, 8, 7]

'令人惊讶'给出了相同的!无法获得特定的列(当然,除了逐个迭代)。

因此,我无法管理将矩阵A与另一个向量合并,即用另一列扩展A. Matlab风格的方法显然很奇怪:

In[]: B = A, [4,6,8]
In[]: B
Out[]: ([[1, 2, 3], [9, 8, 7], [5, 5, 5]], [4, 6, 8])

嵌套的结果,而不是A的扩展。

相同
B = [A, [4,6,8]]

好的,更像Python:

A.append([11,12,13])

这很容易添加一行。但是有没有类似的方法来添加列?

(令人沮丧的是,Python doc提供了各种奇特的例子,但显然这些都集中在为一维列表演示'pythonic'解决方案。)

1 个答案:

答案 0 :(得分:6)

我自己来自MATLAB,我理解你的观点。 问题是Python列表不是设计用作矩阵的。索引列表时,您始终使用顶级列表元素,例如A[:][1]会返回所有([:])三个列表元素,即[1, 2, 3][9, 8, 7][5, 5, 5]。然后从中选择第二个([1])元素,即[9, 8, 7]A[1][:]也是如此,反之亦然。

话虽如此,您仍然可以使用nested lists进行简单的索引编制任务,因为A[1][1]会给出预期的结果(8)。但是,如果您计划将整个MATLAB代码迁移到Python或处理非平凡的矩阵问题,那么您一定要考虑使用NumPy。甚至有NumPy guide for former MATLAB users