2016-12-09 61 views
1

初めてのポスターで、私の問題を完全に解決したものは見つかりませんでした。PythonのCount-in-Cellsを使用した3Dスターフィールドでのクラスタリング

私はマスタープロジェクトの銀河植民地化のためのシミュレーションに取り組んでいます。私がしようとしていることは、シミュレーションが終了した後に残された無彩色の星の空白を見て、過去の統計的な変動のクラスタリングの動作があるかどうかを調べることです。モンテカルロの数値問題であるので、相関関数は実際には適切ではないので、銀河団を見るために通常使用されるcount-in-cells法を使用しています。

だから私は私がやりたいことはボックス内の星の数をカウントし、平均は可能との統計を何をすべきかを比較するために様々なサイズの使用ボックスでcartesians

data = np.genfromtxt('counts.csv') # positions of uncolonsed stars 
x = data[:,0] 
y = data[:,1] 
z = data[:,2] 

で働いています結果。

方向は、バブルプロットhereなどの3Dヒストグラムを見ています。私はこれを試してみて、それは私のすべてのデータをビニングしているようには見えません。なぜキューブの「フロア」に「バブル」がありますか?しかし、屋根の多くは何もありません:

3D Bubble Histogram

あなたがプロットされた生のスターフィールドを見るとこれは明らかに間違っている:

Plotted star field

高いz値のビンが任意のデータを保持していないように見えます。これはおそらくかなり簡単な問題ですが、私は私よりもPythonで優れた新鮮な目と心が必要です。

これはどのように修正することができますか?また、1箱あたりのポイント数、つまりビンごとの数を数える方法を探したいと思います。

私は少し暗いですが、申し訳ありませんが、私は細かい仲間が私を提供することができますあなたの助けに感謝します。

ありがとうございました!

+0

リンクされた答えのコードは、多分私はちょうど彼らがやろうとしているのか理解していない、私には過度に複雑に見えます。任意の次元のヒストグラムを計算するには 'numpy.histogramdd'を使います。 – Goyo

+0

サンプル上でKDEを実行し、ボリュームレンダリングで可視化することができます。たとえば、[here](http://stackoverflow.com/questions/25286811/how-to-plot-a-3d-density-map-in-python-with-matplotlib)を参照してください。 –

+0

KDEの治療は本当に良いようです、Vlasに感謝します。私に残されているのは、1ビンあたりのポイント数をカウントすることだけです。なぜscipy.statsに混乱した。binned_statistic_ddに次のようなエラーが出ています:TypeError:binned_statistic_dd()は少なくとも2つの引数をとります(5が与えられます) – Skippeh

答えて

1

コメントには、あなたの問題を解決するためのいくつかの選択肢があり、コードを見ずにコードに何が間違っているかを伝えるのは難しいです。いずれにせよ、この種の問題は通常、規則的なグリッド内のデータを数えることによって解決される(それにもかかわらず、ヒストグラムを行う一般的なアプローチである)。

独自のグリッドを構築する利点は、すべての「セクタ」がどこにあるのか、開始する場所と終了する場所をすぐに知ることです。あなたがそれを試してみたいと思ったら、代わりに次のアプローチを提案します。

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

# Generating some random data. 
data = np.random.randint(0, 100, (1000,3)) 
x, y, z = data[:, 0], data[:, 1], data[:, 2] 

# Generating raw view 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.scatter(x, y, z, marker='+', s=25, c='r') 
plt.show() 

# Generating some grid with origin, cell size, and number of cells 10 10 10 
numx, numy, numz = 5, 5, 5 
origx, origy, origz = 0, 0, 0 
sizex, sizey, sizez = 20, 20, 20 
grid = np.vstack(np.meshgrid(range(numx), range(numy), range(numz))).reshape(3, -1).T 
gx, gy, gz = grid[:, 0]*sizex + origx, grid[:, 1]*sizey + origy, grid[:, 2]*sizez + origz 

# Calculating the number of stars in each cell: 
ix = ((x - origx)/sizex).astype(int) 
iy = ((y - origy)/sizey).astype(int) 
iz = ((z - origz)/sizez).astype(int) 
s = np.zeros((numx, numy, numz)) 
for i in range(ix.shape[0]): 
    s[ix[i], iy[i], iz[i]] = s[ix[i], iy[i], iz[i]] + 1 
s = s.flatten() 
mask = s > 0 

# Plotting the result 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.scatter(gx[mask], gy[mask], gz[mask], marker='o', s=s[mask]*100, c='b', edgecolor ="r") 
plt.show() 

無作為化データに対する結果がこれです:

bubble histogram in matplotlib

関連する問題