私は、ファイルにあなたのサンプルを入れた場合、私はあなたがそれが2列名として解釈するMetric 1
のような名前を持っているので、私はnames=True
を使用することができなかった
In [45]: names=['Time','Node','Type','Metric_1','Metric_2']
In [46]: data = np.genfromtxt('stack38285208.txt', dtype=None, names=names, skip_header=1)
In [47]: data
Out[47]:
array([(0.0, 1, b'Abcd', 1234.5678, 9012.3456),
(0.0, 1, b'Efgh', 1234.5678, 9012.3456),
(0.01, 2, b'Abcd', 1234.5678, 9012.3456),
(0.01, 2, b'Efgh', 1234.5678, 9012.3456),
(0.02, 3, b'Abcd', 1234.5678, 9012.3456),
(0.02, 3, b'Efgh', 1234.5678, 9012.3456),
(0.03, 1, b'Abcd', 1234.5678, 9012.3456),
(0.03, 1, b'Efgh', 1234.5678, 9012.3456),
(0.04, 2, b'Abcd', 1234.5678, 9012.3456),
(0.04, 2, b'Efgh', 1234.5678, 9012.3456)],
dtype=[('Time', '<f8'), ('Node', '<i4'), ('Type', 'S4'), ('Metric_1', '<f8'), ('Metric_2', '<f8')])
で構造化numpy
配列にロードすることができます。したがって、別のnames
のリストとskip_header
のリスト。私はPython3を使用しているので、S4
形式の文字列はb'Efgh'
と表示されています。
私はフィールド名でフィールド(列)にアクセスすることができ、それらを使ってさまざまな種類のフィルタと数学を行うことができます。例えば:Type
はb'Abcd'
ある
フィールド:
In [63]: data['Type']==b'Abcd'
Out[63]: array([ True, False, True, False, True, False, True, False, True, False], dtype=bool)
とNode
は1:
In [64]: data['Node']==1
Out[64]: array([ True, True, False, False, False, False, True, True, False, False], dtype=bool)
と一緒に:
In [65]: (data['Node']==1)&(data['Type']==b'Abcd')
Out[65]: array([ True, False, False, False, False, False, True, False, False, False], dtype=bool)
In [66]: ind=(data['Node']==1)&(data['Type']==b'Abcd')
In [67]: data[ind]
Out[67]:
array([(0.0, 1, b'Abcd', 1234.5678, 9012.3456),
(0.03, 1, b'Abcd', 1234.5678, 9012.3456)],
dtype=[('Time', '<f8'), ('Node', '<i4'), ('Type', 'S4'), ('Metric_1', '<f8'), ('Metric_2', '<f8')])
Iは、任意のmean
を取ることができますこのRecoのサブセットからの数値フィールドの数RDS:私も変数にこれらのフィールドを割り当て、それらの直接
In [70]: nodes=data['Node']
In [71]: types=data['Type']
In [72]: nodes
Out[72]: array([1, 1, 2, 2, 3, 3, 1, 1, 2, 2])
In [73]: types
Out[73]:
array([b'Abcd', b'Efgh', b'Abcd', b'Efgh', b'Abcd', b'Efgh', b'Abcd',
b'Efgh', b'Abcd', b'Efgh'],
dtype='|S4')
2つのフロートフィールドで働くことができる
In [68]: data[ind]['Metric_1'].mean()
Out[68]: 1234.5678
In [69]: data[ind]['Metric_2'].mean()
Out[69]: 9012.3456000000006
、2列のアレイとして見:
In [78]: metrics = data[['Metric_1','Metric_2']].view(('float',(2)))
In [79]: metrics
Out[79]:
array([[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456]])
metrics
nodes
は1
In [83]: metrics[nodes==1,:]
Out[83]:
array([[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456],
[ 1234.5678, 9012.3456]])
In [84]: metrics[nodes==1,:].mean(axis=0) # column mean
Out[84]: array([ 1234.5678, 9012.3456])
numpy
は、パンダとitertools
がありますが、きちんとしたgroupby
機能を持っていません。
@ThiagoTeixeira大歓迎です。そして、はい、パンダはこのように複数の列でグループ化すればそれを行います: 'data.groupby([" Node "、" Type "])。mean()' –
私はそれを試みます。ありがとう! – Thiago