擴展上unutbu的再回應以上,有可能自動生成分數屏蔽數組。由於每次通過循環的值都是一致的,因此每個值的分數只需計算一次。在應用分數之前和之後,在示例6x10陣列上執行此操作的方式稍顯不雅。
>>> import numpy
>>> values = numpy.random.randint(6, size=(6,10))
>>> values
array([[4, 5, 1, 2, 1, 4, 0, 1, 0, 4],
[2, 5, 2, 2, 3, 1, 3, 5, 3, 1],
[3, 3, 5, 4, 2, 1, 4, 0, 0, 1],
[2, 4, 0, 0, 4, 1, 4, 0, 1, 0],
[0, 4, 1, 2, 0, 3, 3, 5, 0, 1],
[2, 3, 3, 4, 0, 1, 1, 1, 3, 2]])
>>> b = values.copy()
>>> b[ b<3 ] = -1
>>> b[ b==3 ] = 0
>>> b[ b>3 ] = 1
>>> b
array([[ 1, 1, -1, -1, -1, 1, -1, -1, -1, 1],
[-1, 1, -1, -1, 0, -1, 0, 1, 0, -1],
[ 0, 0, 1, 1, -1, -1, 1, -1, -1, -1],
[-1, 1, -1, -1, 1, -1, 1, -1, -1, -1],
[-1, 1, -1, -1, -1, 0, 0, 1, -1, -1],
[-1, 0, 0, 1, -1, -1, -1, -1, 0, -1]])
順便說一句,this線程聲稱,直接在numpy的創建組合將產生比itertools 5倍左右更快的性能,雖然也許在一些可讀性爲代價的。
你可以發佈你的循環解決方案嗎?有時候更容易優化已經運行的代碼,而不是試圖重新發明輪子...... – mgilson
發佈您的解決方案的另一個優點是它解決了含糊之處。例如,我不確定是否想要找到列出每列最多的六列(這很容易)或其他內容。 – DSM
它也可能有助於更多地瞭解您的數據集。例如,聽起來你願意接受來自一行的任何六個答案 - 如果每一行都是一個觀察,爲什麼其餘的被拒絕?您的數據數組可以通過某種方式進行重構來簡化搜索空間嗎? – abought