2

数値データと場合によっては文字列を含む216x216行列で動作するコードをMATLABに実装しました。これらの行列に対して私が行う操作は、ほとんどの場合、特定のしきい値を超えるフィルター行列のようなもので、ある値を超えるすべての行列インデックスを検索し、たとえばXを超える値のリストを検索してから、それらの間の連続した違いを検索し、いくつかの文字列置換操作を行います。行列の内積などを実行します。これらの行列を生成するには、何千ものファイルにアクセスする必要があります(MATLABで使用するdlmread)。

今、私は上記のプロジェクトを、通常OSにバンドルされている他の言語(Perl、c、python、またはオープンソース言語など)で実装する必要があります。

簡単に検索したところ、Pythonが研究に適したツールであることがわかりました。Pythonには、行列演算(ファイルを配列に直接読み込む、検索、dlmwriteなど)に相当するMATLABがいくつかありますか?

私のコードには、これらのMATLAB関数がない場合にすでに多くのループがあるため、コードは非常に乱雑になり、保守が困難になります。

または、他の選択肢を指摘していただけますか。私は少しPerlに精通していますが、PythonやRには精通していません。

4

2 に答える 2

6

NumPyと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]])

(恥知らずなプラグイン:PythonとMatlabの間でかつて行った比較。

于 2012-05-25T03:12:50.407 に答える
3

NumPy / SciPyを見てみたいと思うかもしれません、彼らはあなたが望むことをするのを助けるかもしれません。さらに、かなりの数のユーザーがいるため、必要なときに簡単にサポートを受けることができます。ここで両方のライブラリの一般的な紹介

于 2012-05-25T02:59:35.857 に答える