3

numpy の 1-D 構造化配列があり、1 つのレコードの一部だけを取得したいと考えています。このタイプのリクエストをスライスする方法を見つけようとしていました。これが私のコードです:

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 に答える