1

この同じトピックについて、ここですでにいくつか質問しましたが、一緒に研究している教授を失望させないようにしています. Python を使用するのはこれが初めてで、少し頭を悩ませているかもしれません。

とにかく、読み取るファイルが送信され、次のコマンドを使用できました。

SNdata = numpy.genfromtxt('...', dtype=None, 
usecols (0,6,7,8,9,19,24,29,31,33,34,37,39,40,41,42,43,44), 
names ['sn','off1','dir1','off2','dir2','type','gal','dist',
'htype','d1','d2','pa','ai','b','berr','b0','k','kerr'])

sn特定の超新星の名前の単なる配列です。typeは、超新星のタイプ (Ia または II) などの配列です。

最初に行う必要があることの 1 つは、SN タイプ (Ia または II) が与えられた特定のプロパティの確率を単純に計算することです。

たとえば、列htypeは銀河の形態です (1 = 楕円形から 8 = 不規則な整数として与えられます)。TypeIa が指定された場合の楕円の確率と、TypeII が指定された場合の楕円の確率を、最大 8 までのすべての整数について計算する必要があります。

htype = 1 and type = Ia楕円の場合、要素の総数で割った要素の数だけが必要であることはわかっていtype = Iaます。そして、 を持つhtype = 1 and type = II要素の総数で割った要素の数type = II

このためのコードの書き方がわかりません。最初に各タイプの総数を見つけてから、 for ループを実行して、特定htypetype(Ia または II) を持つ要素の数を見つけることを計画していました。

これを始めるのを手伝ってくれる人はいますか?明確化が必要な場合は、お知らせください。

どうもありがとう。

4

2 に答える 2

4

Numpy はブール配列演算をサポートしているため、コードをかなり簡単に記述できます。たとえば、次のことができます。

htype_sums = {}
for htype_number in xrange(1,9):
  htype_mask = SNdata.htype == htype_number
  Ia_mask = SNdata.type == 'Ia'
  II_mask = SNdata.type == 'II'

  Ia_sum = (htype_mask & Ia_mask).sum() / Ia_mask.sum()
  II_sum = (htype_mask & II_mask).sum() / II_mask.sum()
  htype_sums[htype_number] = (Ia_sum, II_sum)

_mask変数はブール配列であるため、それらを合計すると、 である要素の数がカウントされますTrue

于 2013-11-03T23:04:52.033 に答える