Wal*_*mit 0 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]]
Run Code Online (Sandbox Code Playgroud)
试图沿着两个维度提取矩阵中的向量:
In[]: A[:][1]
Out[]: [9, 8, 7]
In[]: A[1][:]
Out[]: [9, 8, 7]
Run Code Online (Sandbox Code Playgroud)
'令人惊讶'给出了相同的!无法获得特定的列(当然,除了逐个迭代).
因此,我无法管理将矩阵A与另一个向量合并,即用另一列扩展A. Matlab风格的方法显然很奇怪:
In[]: B = A, [4,6,8]
In[]: B
Out[]: ([[1, 2, 3], [9, 8, 7], [5, 5, 5]], [4, 6, 8])
Run Code Online (Sandbox Code Playgroud)
结果是嵌套的东西,而不是A的扩展.相同的
B = [A, [4,6,8]]
Run Code Online (Sandbox Code Playgroud)
好的,更像Python:
A.append([11,12,13])
Run Code Online (Sandbox Code Playgroud)
这很容易添加一行.但有没有类似的方法来添加一个列?
(令人沮丧的是,Python doc提供了各种奇特的例子,但显然这些都集中在为一维列表演示'pythonic'解决方案.)
我自己来自MATLAB,我理解你的观点.问题是Python列表不是设计用作矩阵的.当索引列表,你总是在顶层列表元素的工作,如A[:][1]返回所有的([:])三甲之列要素,即[1, 2, 3],[9, 8, 7]和[5, 5, 5].然后[1]从那些中选择第二个()元素,即[9, 8, 7].A[1][:]做同样的事情,反过来说.
话虽这么说,你仍然可以使用嵌套列表进行简单的索引任务,因为A[1][1]它给出了预期的结果(8).但是,如果您计划将整个MATLAB代码迁移到Python或处理非平凡的矩阵问题,那么您一定要考虑使用NumPy.甚至还有一个针对前MATLAB用户的NumPy指南.