python是否能够进行MATLAB等效矩阵运算?

时间:2012-05-25 02:57:34

标签: python matlab matrix file-processing

我在MATLAB中实现了代码,这些代码在包含数字数据和某些字符串的216x216矩阵上运行。我在这些矩阵上做的操作大多是像某个阈值以上的滤波器矩阵,找到高于某个值的所有矩阵索引,找到上面的值列表,然后找到它们之间的连续差异,一些字符串替换操作。做矩阵点产品等我需要访问数千个文件来生成这些矩阵(我在MATLAB中使用dlmread)。

现在我需要用通常与操作系统捆绑的任何其他语言实现上述项目,例如Perl,c或python或开源语言。

我做了一个简短的搜索,发现python是一个很好的研究工具。 python是否有一些MATLAB等效的矩阵运算(比如直接将数据读入数组,find,dlmwrite等)

因为我的代码已经有很多没有这些MATLAB函数的循环,所以代码会变得更加混乱和难以维护。

或者你可以指出任何其他选择。我熟悉小Perl但不熟悉python或R.

2 个答案:

答案 0 :(得分:6)

this page comparing NumPy and Matlab开始。

以下是有关您帖子的一些示例:

In [5]: import scipy

In [6]: X = scipy.randn(3,3)

In [7]: X
Out[7]: 
array([[-1.16525755,  0.04875437, -0.91006082],
       [ 0.00703527,  0.21585977,  0.75102583],
       [ 1.12739755,  1.12907917, -2.02611163]])

In [8]: X>0
Out[8]: 
array([[False,  True, False],
       [ True,  True,  True],
       [ True,  True, False]], dtype=bool)

In [9]: scipy.where(X>0)
Out[9]: (array([0, 1, 1, 1, 2, 2]), array([1, 0, 1, 2, 0, 1]))

In [10]: X[X>0] = 99

In [11]: X
Out[11]: 
array([[ -1.16525755,  99.        ,  -0.91006082],
       [ 99.        ,  99.        ,  99.        ],
       [ 99.        ,  99.        ,  -2.02611163]])

In [12]: Y = scipy.randn(3,2)

In [13]: scipy.dot(X, Y)
Out[13]: 
array([[-124.41803568,  118.42995937],
       [-368.08354405,  199.67131528],
       [-190.13730231,  161.54715769]])

(无耻的插件:a comparison I once made between Python and Matlab.

答案 1 :(得分:3)

您可能需要查看NumPy / SciPy,它们可以帮助您按照自己的意愿行事。此外,还有相当数量的用户可以在需要时更容易获得帮助。两个图书馆的一般介绍here