2015-11-02 24 views
3

我有一個numpy一維結構數組,我只想得到一個記錄的一部分。我試圖找出如何分割這種類型的請求。這裏是我的代碼:切片numpy結構一維數組獲得記錄的一部分

summary_stat_list = ['mean', 'variance', 'median', 'kurtosis', 'skewness'] 
model_summary_stats = np.zeros(5,dtype=[('statistic', 
                 'object'), 
              ('f1', 'float'), 
              ('f2', 'float'), 
              ('f3', 'float'), 
              ('m1', 'float'), 
              ('m2', 'float'), 
              ('m3', 'float'), 
              ('t3', 'float'), 
              ('t2', 'float'), 
              ('t1', 'float'), 
              ('prom1', 'float'), 
              ('prom2', 'float')]) 
for r in range(model_summary_stats.shape[0]): 
    model_summary_stats['statistic'][r] = summary_stat_list[r] 

現在,數組是這樣的:

[('mean', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 
('variance', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 
('median', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 
('kurtosis', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 
('skewness', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)] 

我的問題是,我怎麼能得到所有,但第一個數組的第一個元素。也就是說,在'平均'數組中,我只想得到數字條目。

我試圖像

model_summary_stats[0]['f1':] 

或:

model_summary_stats[0][1:] 

,但這些都沒有工作。有什麼建議麼。

+0

'[我爲我在model_summary_stats [0]] [1:]' – Donbeo

+0

嗯,我只是試過,但它沒有奏效。我把'我'放在'1'的地方,但沒有運氣。我可以編寫某種循環來獲取這些值,但這種方式看起來並不那麼pythonic。必須有一個更簡單的方法。 – krishnab

回答

4

切片不適用於字段名稱索引。您必須使用所需的字段名稱,而不是一個列表:

model_summary_stats[0][['f1','f2','f3',etc] 

您還可以得到該列表的東西,如

model_summary_stats.dtype.names[1:] 

你應該記住,這種萬事索引是不發達。檢索值是可以的,但不能以這種方式設置值。而且你無法跨欄進行數學運算。

http://docs.scipy.org/doc/numpy/user/basics.rec.html#accessing-multiple-fields-at-once

不同的D型可能更爲有用

dt = np.dtype([('statistic',object),('values',(float,11))]) 
dt = np.dtype([('statistic',object),('values',(float,8)),('prom',(float,3))]) 

或處理數據時什麼都分組更有意義。

相關問題