今日私が期待していなかったPythonのリストの理解を使用してエラーが発生しました。単に基本的にエラーが何であるかを説明しPython: "numpy.amax" vs Pythonの "max": 'int'オブジェクトは反復不可
TypeError: 'int' object is not iterable, why it's happening
:私はこのポストをチェックします。私の質問はもう少し具体的です。なぜ、 'np.percentile'関数は動作するのですか? 'max'と 'min'ではありません。注:binnedMetricは入れ子リストの辞書です。つまり、binnedMetric ['key'] [num1-numBins] [listContainingItemsWithinBin]です。私は各ビンのすべてのアイテムについて統計を取っています。ここで働く私のコードからsnippitさ:
tempAvgMetric = [[] for dmx in range(numBins)]
for idx in range(len(binnedMetric[expDir])):
for xxx in range(numBins):
tempAvgMetric[xxx].extend(binnedMetric[expDir][idx][nameNum][xxx])
for idx in range(numBins):
if np.isnan(avgMetric[idx]):
tempAvgMetric[idx] = 0
percentile50 = np.array([np.percentile(tempAvgMetric[dmx], 50) for dmx in range(numBins) if tempAvgMetric])
percentile75 = np.array([np.percentile(tempAvgMetric[dmx], 75) for dmx in range(numBins) if tempAvgMetric])
percentile25 = np.array([np.percentile(tempAvgMetric[dmx], 25) for dmx in range(numBins) if tempAvgMetric])
maximum = np.array([np.amax(tempAvgMetric[dmx]) for dmx in range(numBins) if tempAvgMetric])
minimum = np.array([np.amin(tempAvgMetric[dmx]) for dmx in range(numBins) if tempAvgMetric])
をゼロに「ナン」を変換するには、正しく動作するためにパーセンタイル関数を取得する必要があるように思われます。
maximum = np.array([max(tempAvgMetric[dmx]) for dmx in range(numBins) if tempAvgMetric])
minimum = np.array([min(tempAvgMetric[dmx]) for dmx in range(numBins) if tempAvgMetric])
私のように定義されて、私は「DMX」を反復処理しています、min関数の繰り返し処理を行うわけではないので、私はそれが独特見つける:私はまた、次のようにPythonの「分」と「最大」の機能を使用してみましたリストの理解に反復可能です。私は、関数呼び出しが何かに影響を与えるとは思わないでしょう。上の "np.percentile"リストの解説に示されているように、ループはほぼ同じです。なぜこの行動が存在するのかについての手がかりがあれば、大いに感謝します。ありがとうございました!
**更新日: 機能コードです。それは、 "intオブジェクトはiterableではありません"エラーで動作します。単に「」
a = [[np.nan, np.nan],[1],[], [4,7,6,8,10],[13,12,0.2]]
の値を変更
import numpy as np
a = [[1,2,3],[1],[], [4,7,6,8,10],[13,12,0.2]]
b = [[1,4,2],[1,6,7],[6,5,3],[1,4,3],[13,11,1]]
c = [[1,2,3], [1,4,6], [1,4,6], [1], []]
d = [[2],[4],[6],[8],[10]]
binnedMetric = {'tempKey': [[a,b], [c,d]]}
expDir = 'tempKey'
numBins = 5
nameNum = 0
tempAvgMetric = [[] for dmx in range(numBins)]
for idx in range(len(binnedMetric[expDir])):
for xxx in range(numBins):
tempAvgMetric[xxx].extend(binnedMetric[expDir][idx][nameNum][xxx])
avgMetric = np.array([np.mean(tempAvgMetric[dmx]) for dmx in range(numBins) if tempAvgMetric])
varMetric = np.array([np.sqrt(np.var(tempAvgMetric[dmx])) for dmx in range(numBins) if tempAvgMetric])
for idx in range(numBins):
if np.isnan(avgMetric[idx]):
tempAvgMetric[idx] = 0
percentile50 = np.array([np.percentile(tempAvgMetric[dmx], 50) for dmx in range(numBins) if tempAvgMetric])
percentile75 = np.array([np.percentile(tempAvgMetric[dmx], 75) for dmx in range(numBins) if tempAvgMetric])
percentile25 = np.array([np.percentile(tempAvgMetric[dmx], 25) for dmx in range(numBins) if tempAvgMetric])
maximum = np.array([np.amax(tempAvgMetric[dmx]) for dmx in range(numBins) if tempAvgMetric])
minimum = np.array([np.amin(tempAvgMetric[dmx]) for dmx in range(numBins) if tempAvgMetric])
maximum2 = np.array([max(tempAvgMetric[dmx]) for dmx in range(numBins) if tempAvgMetric])
minimum2 = np.array([min(tempAvgMetric[dmx]) for dmx in range(numBins) if tempAvgMetric])
print(percentile50)
print(maximum)
print(maximum2)
は、私はに実行したのと同じエラーを与えるが、唯一「maximum2」の、コードを壊します。
サンプルデータと予想される結果がありますか? –
申し訳ありませんが、いくつか編集しなければなりませんでした。 amaxとaminのコードでエラーが発生し始めました。上記の投稿をbinnedMetricのダミーリストで更新して実行します。 –