2015-11-02 58 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))]) 

或处理数据时什么都分组更有意义。