我有一個 N 行 M 列的陣列。
我想遍歷所有列,找到包含該列最大值的行的索引。但是,每行只能選擇一次。
例如,讓我們考慮一個矩陣
1 1
2 2
輸出應該是[1, 0]. 因為第 1 行(值為 2)是第 0 列的最大值,那么我們移動到第 2 列,第 1 行不在考慮范圍內,因此第 0 行將是最高的單元格。
實際上,使用 for 嵌套 for 回圈可以輕松解決問題,例如:
removed_rows = []
for i in range (nb_columns):
index_max = 0
value_max = A[0,i]
for j in range (nb_rows):
if j in removed_rows:
continue
else:
if value_max < A[j,i]:
index_max = j
value_max = A[j,i]
removed_rows.append (index_max)
然而,對于一個巨大的矩陣來說似乎很慢。有沒有什么方法可以讓我們做得更快(用 numpy?)?
非常感謝
uj5u.com熱心網友回復:
這可能不是很快,因為它仍然回圈遍歷列,我認為由于限制,這是不可避免的,但應該比您的解決方案更快,因為它找到了最大值的索引argmax:
out = []
mm = A.min() - 1
for j in range(A.shape[1]):
idx = np.argmax(A[:,j])
# replace the entire row with mm
# so next `argmax` will ignore this row
A[idx] = mm
out.append(idx)
以上在 100 x 100 陣列上大約需要 640 us,在 1k x 1k 陣列上大約需要 18ms。您的代碼拒絕在我系統的合理時間內在 1k x 1k 陣列上運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355846.html
標籤:麻木的
