我今天碰到一個錯誤,使用Python的List理解,我沒有料到。我查了一下這個帖子: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]。我正在統計每個垃圾箱中的所有物品。下面是從我的代碼,其工作方式的這段:
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」,其定義爲:我使用Python的「最小值」和「最大值」的功能如下也嘗試在列表理解中可迭代。我不認爲函數調用會影響任何東西。如上面在「np.percentile」列表解析中所示,循環幾乎相同。任何線索,爲什麼這種行爲存在將不勝感激。謝謝!
**更新: 這是一個功能代碼。它工作,沒有「int對象不可迭代」的錯誤。
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)
簡單地改變的值「a」到
a = [[np.nan, np.nan],[1],[], [4,7,6,8,10],[13,12,0.2]]
斷碼,但僅限於「maximum2」,讓我也陷入了同樣的錯誤。
有一些樣本數據和預期結果?你不應該需要循環或與numpy列表解析 –
對不起,我不得不編輯一些東西。我的amax和amin代碼開始拋出錯誤,我不知道爲什麼。我將用binnedMetric的虛擬列表更新上面的帖子,以便它將運行 –