RとPython(NumPy)の対応

> import numpy as np
> C0=[1,2,3]
> C1=['M','F','M']
> C2=[3.3,4.4,5.5]
> x=np.array(zip(C0,C1,C2),dtype=[('id', '<i4'), ('gender', '|S1'), ('value', '<f8')])
> x[1]
(2, 'F', 4.4)

> print(x[x['gender']=='M'])
[(1, 'M', 3.3) (3, 'M', 5.5)]
    • Viewを切る
>>> print(x[[1,2]])
[(2, 'F', 4.4) (3, 'M', 5.5)]
>>> print(x[['gender','value']])
[('M', 3.3) ('F', 4.4) ('M', 5.5)]
>>> print(x[[1,2]][['gender','value']])
[('F', 4.4) ('M', 5.5)]
> print(x[[1,2],['gender','value']])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for long() with base 10: 'gender'
> print(x[[1,2],[0,2]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many indices for array
  • 最後の2つが動いてくれないのがいまいち.
  • Join:xとyを特定のキーを基に結合
>y=np.array(zip([1,2,4],[6.6,7.7,8.8]),dtype=[('id','i4'),('height','f8')])
>from numpy.lib import recfunctions as rfn
>rfn.join_by('id',x,y) # inner join相当 = xとyの両方にあるもののみ返す
>rfn.join_by('id',x,y, jointype="outer") # outer join相当 = xとyのいずれかにあるものを全て返す.埋まらない値は"-"が入る
  • 列結合:cbind相当(c_)....どうやるんだろう.vstackとかhstack動かないし,c_も動かない
  • ファイルの読み込み:
dtype=[('id','i4'), ('height', 'f8')]
ary=np.genfromtxt(fil, dtype=dtype, skip_header=1)
    • csvなら,delimiter="," をgenfromtxtのオプションで付ける
    • header行がなければ,skip_header=1は要らない
  • ファイルの書き出し:
    • とりあえず標準出力に変数aryの中身をタブ区切りで書き出すなら
>print "\t".join(ary.dtype.names)
>for i in range(ary.shape[0]):
>    print "\t".join([str(x) for x in ary[i]])    
  • もう少し複雑にviewを切る
    • 値での絞り込み
>ary[ary['id']==1] 
    • stringのID一覧などで絞るとき用.もう少し簡単にできないものか.
>tf = [x in ["M","F"] for x in ary['gender']]
>ary[np.array(tf)]