2012-10-22 160 views
0

我在Matlab中有以下代碼片段,並且希望將它移植到Python。將此片段從Matlab移植到Python

for i=1:runs; 
    tic; 
    datmat=importdata('data.txt',' '); 
    Limits_Area=[1,261,522,784,1045,1305,1565,1827,2088,2349,2610,2871,3131,3158]; 
    for k=1:2000; 
     for j=1:13; 
     Year_Data=datmat.data(Limits_Area(j):Limits_Area(j+1)-1,4:37); 
     Min_Year=min(Year_Data); 
     Max_Year=max(Year_Data); 
     Mean_Year=mean(Year_Data); 
     GainLoss_Year=100-(Year_Data(1,:)+0.00000001)./(Year_Data(end,:)+0.00000001)*100; 
    end; 
    end; 

我有一個很艱難的時間與

Year_Data=datmat.data(Limits_Area(j):Limits_Area(j+1)-1,4:37);

一部分....任何方向?

謝謝

+0

這將是很好,如果你能表現出一定的來自'data.txt'的數據,並且提供一些你想要完成的事情的解釋,對於那些瞭解python但在matlab中不流暢的人。你能向我們展示你的嘗試以及失敗的方式嗎?另外,在你的代碼中似乎有一個bug,就是外循環以同樣的方式在_exactly_中運行2000次內循環。爲什麼? –

+0

你好羅蘭,數據似乎是一個.txt文件包含貨幣值在整個時間與列:KEY月日,然後一系列三個字符的貨幣代碼,即澳元ATS等。我想完成的只是採取這個Matlab代碼並將其移植到python中,不問任何問題。我在Matlab中也不流利,這就是爲什麼我想要了解特定的行。這實際上是一個有人寫的愚蠢的「基準測試」代碼,所以你看到的是一個bug ......實際上是一個功能。 – Thanos

+0

這一行發生了什麼叫做索引。您正在選擇具體的行和列,它們是:來自Limits_Area(j)到Limits_Area(j + 1)和列4到37的行。Limits_Area(j)在向量中索引,簡單地表示第j個Limits_Area的元素。 http://www.mathworks.com/company/newsletters/articles/Matrix-Indexing-in-MATLAB/matrix.html Numpy有一個非常相似的語法,所以如果它應該在Matlab中看起來相同,請使用它。 – Tobold

回答

2

你嘗試過numpy嗎?它是一個科學計算庫,看起來像Matlab。例如:

在Matlab中: a(1:5,:)

在numpy的: a[0:5] or a[:5] or a[0:5,:]

退房: Numpy for Matlab Users

,如果你不希望使用numpy的,嘗試理解名單:

Year_Data = [ [datmat.data(i,j) for j in range (4,38) ] for i in range(j,j+2) ]

編輯:

for i in range(runs) : 
    datamat = numpy.genfromtxt('data.txt',delimiter=' ', newline ='\n') 
    // Adapt the previous line to the format of your txt file 
    // at this point you should have a numpy.array object with the right shape 
    Limits_Area= numpy.array([1,261,522,784,1045,1305,1565,1827,2088,2349,2610,2871,3131,3158]) 
    for k in range(2000): 
     for j in range(13): 
      Year_Data = datmat[ Limits_Area(j):Limits_Area(j+1)-1 , 4:37 ] 
      etc etc ... 

NB:Matlab的數組索引從1到n,而numpy的數組索引從0到n-1

+2

我不會試圖將任何嚴重的matlab代碼移植到沒有numpy的python。 – mgilson

+0

是的,我使用numpy,那麼這個特定的行在Matlab中做了什麼,它將如何轉化爲python?感謝這似乎是在正確的軌道上。 – Thanos

+0

我添加了一些信息 – lucasg