【发布时间】:2017-05-03 07:55:15
【问题描述】:
来自 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 文档提供了各种花哨的示例,但显然这些示例侧重于演示一维列表的“pythonic”解决方案。)
【问题讨论】:
-
Raw Python 在设计时并未考虑到矩阵代数。您应该调查 numpy 库。
-
好吧,你不能只是随机地将 matlab 矩阵中的概念扔到 python 列表中,它们是完全不同的数据结构。这个问题需要比我们提供的更多的帮助,因为您需要阅读 Python 教程。你说你确实调查过了,但显然你不知道发生了什么。所以再读一遍,放弃之前的matlab知识。当您在切片或索引方面遇到特定(!)问题时,请回来询问。除此之外,如果您想要类似 matlab 的行为,请使用 numpy 数组和矩阵,而不是 Python 列表。
-
第一步,将 Python 列表视为对象序列。它没有任何用于添加“列”的内置方法,因为“列”的概念不适用于列表。当您有一个列表列表时,这些列仅在您的脑海中。对于 python,它是列表对象的一维序列。列表并非旨在执行常见的矩阵运算。