【问题标题】:Is python capable of doing MATLAB equivalent matrix operations?python 是否能够进行 MATLAB 等效矩阵运算?
【发布时间】:2012-05-25 02:57:33
【问题描述】:

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

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

我做了一个简短的搜索,发现 python 是一个很好的研究工具。 python 是否有一些用于矩阵运算的 MATLAB 等价物(例如将文件直接读入数组、查找、dlmwrite 等)

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

或者您能否指出任何其他选择。我熟悉小 Perl,但不熟悉 python 或 R。

【问题讨论】:

  • 我确实使用 scipy/numpy 完成了我的项目。很棒的体验!

标签: python matlab matrix file-processing


【解决方案1】:

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.

【讨论】:

  • scipy.nonzero(X>0) 可以替换为numpy.where(X>0),我认为这样更容易阅读。
  • 同意。 where 表示应该返回位置。已编辑。
  • 是的,sci/numpy 看起来像解决方案!
【解决方案2】:

你可能想看看NumPy/SciPy,他们可能会帮助你做你想做的事。此外,还有大量用户,这将使在需要时更容易获得帮助。两个库的一般介绍here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2013-08-13
    • 1970-01-01
    • 2022-11-02
    • 2022-10-15
    • 2012-02-08
    • 2013-09-02
    相关资源
    最近更新 更多