kri*_*nab 3 python arrays numpy structured-array
我有一个 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]
Run Code Online (Sandbox Code Playgroud)
现在,该数组如下所示:
[('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)]
Run Code Online (Sandbox Code Playgroud)
我的问题是,除了第一个数组的第一个元素之外,我怎样才能获得所有元素。也就是说,在 'mean' 数组中,我只想获取数字条目。
我正在尝试类似的东西
model_summary_stats[0]['f1':]
Run Code Online (Sandbox Code Playgroud)
或者:
model_summary_stats[0][1:]
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用。有什么建议。
切片不适用于字段名称索引。您必须改用所需字段名称的列表:
model_summary_stats[0][['f1','f2','f3',etc]
Run Code Online (Sandbox Code Playgroud)
您还可以使用类似的内容获得该列表
model_summary_stats.dtype.names[1:]
Run Code Online (Sandbox Code Playgroud)
您应该记住,这种多字段索引的开发很差。可以检索值,但您不能以这种方式设置值。而且您不能跨列进行数学运算。
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))])
Run Code Online (Sandbox Code Playgroud)
或者在处理数据时最有意义的分组。