3

我有一个 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:]

但这些都不起作用。有什么建议么。

4

1 回答 1

5

切片不适用于字段名称索引。您必须改用所需字段名称的列表:

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

不同的 dtype 可能更有用

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

或者在处理数据时最有意义的分组。

于 2015-11-02T19:01:32.723 回答