前提・実現したいこと
(x, y)
座標と特定の値value
のカラムで構成されたデータが手元にあり、これをもとに二次元のカラーメッシュを作ろうとしています。具体的には、xy座標をもとにグリッドを作成し、それぞれのグリッドに含まれるデータポイントのvalue
の合計値、平均値、中央値に基づいたカラーメッシュが作りたいです。
合計値、平均値は以下の方法で計算できました。
python
1import numpy as np 2import pandas as pd 3 4step = 5 5xx = np.arange(0, 200+step, step) 6yy = np.arange(0, 200+step, step) 7 8df = pd.read_csv(data_path) 9 10# 合計値 11sum_hist, _x, _y = np.histogram2d(df['x'], df['y'], bins=(xx, yy), weights=df['value']) 12# 平均値 13count, _x, _y = np.histogram2d(df['x'], df['y'], bins=(xx, yy)) 14mean_hist = np.divide(sum_hist, count)
sum_hist
、mean_hist
にはそれぞれ、xx
とyy
に基づいて分割されたデータポイントの持つvalue
の合計値、平均値がそれぞれのグリッドに格納された二次元配列が生成されています。histogram2dはweightを入力するとグリッド内のデータの持つ合計値、入力しないとグリッド内の単純なデータ数が計算されるため、np.divideを使ってやればグリッド内のvalue
の平均値が計算できます。
発生している問題
これと似たようなnpの関数を使って(つまり、Pythonネイティブのfor-loopを利用せず)各グリッド内のvalue
の中央値を計算する方法はあるでしょうか?中央値を計算するにはどうしてもグリッド内のデータを整列する必要があるため、histogram2dをそのまま使う方法は思いつきませんでした。データが巨大なため、for-loopを使うのはとても遅くなってしまいます。numpyに詳しい方、あるいはアルゴリズムに詳しい方、ご教授お願いします。
環境
バグではないので関係はないと思いますが、環境はpython3.7, numpy1.15です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。