2012-05-25 3 views
2

Я реализовал коды в MATLAB, которые работают с матрицами 216x216, которые содержат числовые данные и иногда строки. Операции, которые я делаю на этих матрицах, в основном похожи на матрицы фильтров выше определенного порога, найдите все индексы матриц, которые выше некоторого значения. Найдите список значений выше, скажем, X, а затем найдите последовательные различия между ними, некоторые строки заменят манипуляции. Делайте матричные точечные продукты и т. Д. Мне нужно получить доступ к тысячам файлов для создания этих матриц (dlmread, которые я использую в MATLAB).Может ли python выполнять операции эквивалентной матрицы MATLAB?

Теперь мне нужно реализовать вышеупомянутый проект на любом другом языке, который обычно связан с ОС, например, с языком Perl, c или python или с открытым исходным кодом.

Я сделал короткий поиск и узнал, что питон - хороший инструмент для исследования. У python есть некоторые из этих эквивалентов MATLAB для операций с матрицами (например, чтение файла непосредственно в массив, find, dlmwrite и т. Д.)

Поскольку у моих кодов уже много петель без этих функций MATLAB, коды будут намного более грязными и трудно поддерживать.

Или вы могли бы указать другие альтернативы. Я знаком с маленьким Perl, но не с python или R.

+1

да, посмотрите на 'scipy' – Anycorn

+1

я завершить свой проект с помощью SciPy/NumPy. Удивительный опыт! – Dexters

ответ

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

(Shameless плагин: a comparison I once made between Python and Matlab.)

+1

'scipy.nonzero (X> 0)' можно заменить на 'numpy.where (X> 0)', который, как мне кажется, легче читать. – Ken

+0

Согласен. 'where' означает, что местоположения должны быть возвращены. Ред. –

+0

Да, sci/numpy выглядит как решение! – Dexters

3

Возможно, вы захотите взглянуть на NumPy/SciPy, они могут помочь вам сделать то, что вы хотите. Кроме того, существует значительное количество пользователей, которые облегчат получение помощи по мере необходимости. Общие сведения Введение в обе библиотеки here

Смежные вопросы