2014-04-06 35 views
1

我正在編寫一個Python程序,該程序一次導入數據點數爲10的數據點。從10個數據點的每個塊中找到該組的最大值,然後程序循環到接下來的10個數據點並繼續。所有這些工作都很好,我只需要構建一個數組來保存每個循環創建一次的最大數據點,以便稍後可以繪製它們。如何創建內環路這陣,這裏是我有:在循環中構建數組

for count in range(self.files/self.block_length): 
    RSS = scipy.fromfile(self.hfile2, dtype=self.datatype, count=self.block_length) 
    MaxRSS = np.max(RSS)#Takes the greatest value in the array of size defined by block_length 

這裏MaxRSS的偉大工程,以保存到文件或打印到屏幕上,作爲循環;然而,在循環結束它只保留最後一個值,我需要的東西來保存所有最大值發現

+0

這可能與列表理解來完成,但實際上你應該使用numpy的數組作爲@unutbu說。 '[scipy.fromfile(self.hfile2,dtype = self.datatype,count = self.block_length).max()計數範圍內(self.files/self.block_length)]' – askewchan

回答

1

不知道這是否會回答你想要的......假設你的for循環打破了1000年指出正確成10塊(我不看到的例子),在一個陣列中創建一個數組,你需要做MaxRSS列表,然後追加的東西出來:

MaxRSS = [] 
for count in range(self.files/self.block_length): 
    RSS = scipy.fromfile(self.hfile2, dtype=self.datatype, count=self.block_length) 
    MaxRSS.append(np.max(RSS)) 

編輯:

這不是Numpy,但可能會有所幫助:

import random 

data = [] 
for _ in range(100): 
    data.append(random.randint(1, 100)) 
# Ok, a is populated with 100 integers. 

# Grab chunks of 10 "points" 
chunks=[data[x:x+10] for x in xrange(0, len(data), 10)] 

# Initialization for the example done. Now, to your max list: 
maxes = [] 
for chunk in chunks: 
    maxes.append(max(chunk)) 
    print "The max number in chunk %s was: %s" % (chunk, maxes[-1]) 
print maxes #prints out the 10 max values of the 10 arrays of 10 numbers 
+0

聽起來很接近,但我得到這個錯誤:AttributeError:'numpy.float32'對象沒有屬性'追加' – eltel2910

+0

@ eltel2910,這是因爲MaxRSS仍然不是列表(而是'numpy.float32')。你初始化它到[](或到一個Numpy數組,可能嗎?) – BorrajaX

+0

我添加了RSS_result = []並改爲RSS_result.append(MaxRSS)。這擺脫了錯誤,但是當我在循環後打印RSS_result時,我只能得到最後一個值 – eltel2910

2

不是一次循環超過10分的,如果你有足夠的內存讀取整個數據集到一個數組,那麼你可以重塑陣列,每行10個值一個二維數組,並取該max沿行:

In [59]: x = np.arange(50) 

In [60]: x.reshape(-1, 10) 
Out[60]: 
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], 
     [30, 31, 32, 33, 34, 35, 36, 37, 38, 39], 
     [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]) 

In [61]: x.reshape(-1, 10).max(axis=1) 
Out[61]: array([ 9, 19, 29, 39, 49]) 
+0

200k代表o_0祕密是什麼? –

+0

使用numpy.memmap打開文件將消除文件被完全讀入內存的要求... –