searchsorted

np.searchsorted(sorted_array_like, value) でvalueが昇順にソートされたsorted_array_likeの何番目に位置するかのindexを返す.より正確には,返されるindexは,そのindexが示す値と,その一つ前のindexが示す値の間に,valueが入るものである.この関数はsorted_array_likeの最小値よりも小さいvalueに対しては,0を返す.また,最大値よりも大きいvalueに対しては,存在する最大のindexより一つ大きい値,つまりlen(sorted_array_like)を返す.このnp.searchsortedの返り値を使って,補間して実数のインデックス相当の値を得るには,以下のように行えばよい.
xs=np.arange(0,100.5,1)x0=5.5i1=np.searchsorted(xs,x0)i0=1./(xs[i1]-xs[i1-1])*(x0-xs[i1-1])+i1-1
補間が必要になるのは,たとえば,統計検定でp-valueの値を百程度以下のサンプル数から,推定しようというような場合である.ならなら,与えられた値よりもnp.searchsortedは小さい値を持つインデックスを返すので,p-valueを過小評価(統計的な有意性を過大評価)する傾向があるからである.サンプル数が千を越える場合には,補間するかどうかの相違は無視できる.この,searchsortedの戻り値(あるいはより精度良くは上のように補間した値)に100/len(sorted_array_like)を乗ずることで,percentileを得ることができる.このpercentileが0ならvalueがsorted_array_likeのどの値よりも小さいことを,100ならどの値よりも大きいことを意味する.