1

複数の for ループで作成されたネストされた配列でいっぱいの配列にヒストグラムを格納しようとしています。

私が得ているエラーは次のとおりです: ' TH1F' オブジェクトには属性 'append' がありません

コードがどのように機能するかの例を次に示します (簡略化されたバージョン)。

hist = []
for c in range 2:  
  hist.append([])

  for e in range 4: 
    hist[c].append([])
    hist_m = ROOT.TH1F("some name","some name",0,0.0,50.0)
    hist[c][e].append(hist_m)

    for z in range 8:
      hist[c][e].append([])
      hist_m = ROOT.TH1F("some name","some name",0,0.0,50.0)
      hist[c][e][z].append(hist_m)  #crashes here

      for pT in range 32:
        hist[c][e][z].append([])
        hist_m = ROOT.TH1F("some name","some name",0,0.0,50.0)
        hist[c][e][z][pT].append(hist_m)

これらのさまざまなヒストグラムをすべてこの大きな配列内に格納して、インデックスを使用するだけで後でコードで使用できるようにしようとしています。しかし、私はエラーが発生しています

'TH1F' object has no attribute 'append'

修正方法がわかりません。解決策はありますか?

コードは次の行でクラッシュします。

hist[c][e][z].append( hist )

前もって感謝します!

4

1 に答える 1

1

ここおよび他の場所では、hist構築している大きな「配列」を指す変数を上書きしています。

hist = ROOT.TH1F("some name","some name",0,0.0,50.0)

別の名前を使用...

EDIT : 命名を変更したため、最初に TH1F を追加することを検討してください。

hist[c][e].append(hist_m)

その後、新しいリスト:

hist[c][e].append([])

そのため、リストの最初の要素はhist[c][e]TH1F になり、2 番目の要素は新しいリストになります。つまり、次のものがあります。

[[[<ROOT.TH1F object ("some name") at 0x556fd65038d0>, []]]]

ゼロインデックス ( c == e == z == 0) はその TH1F を選択します。

あなたが想像しているように見えるデータ構造(それ以上のインデックス作成が行われない場合はヒストグラムであり、インデックス作成が行われる場合はリストです)は機能しません。(確かに__getitem__、TH1F クラスにメソッドを追加してリストを返すことはできますが、それはかなり奇妙なことです。)

索引付け可能な大規模なヒストグラムの「配列」が必要な場合、それらのヒストグラムはすべて最終リーフ・ノードにある必要があります。

于 2019-12-01T07:39:11.993 に答える