我需要在python的二維陣列中找到n個argmins,我該怎么做?
例子:
a=np.array([[1, 5, 9], [2, 3, 10], [4, 11, 12]])
argmins = n_argmins(a, 5) # finding 5 argmins
print(argmins)
輸出:
[[0 1]
[0 2]
[1 0]
[1 1]
[2 0]]
uj5u.com熱心網友回復:
您可以嘗試以下操作:
import numpy as np
a=np.array([[1, 5, 9], [2, 3, 10], [4, 11, 12]])
np.c_[np.unravel_index(a.ravel().argsort()[:5], a.shape)]
它給:
array([[0, 0],
[1, 0],
[1, 1],
[2, 0],
[0, 1]])
uj5u.com熱心網友回復:
將資料轉換為串列,但記住原始索引。在串列中搜索 n min args。
代碼:
def n_argmins(a, n)
for i,inner in enumerate(a):
for j,x in enumerate(inner):
indexes[x] = [i,j]
a_new.append(x)
res = []
for _ in range(n):
res.append(indexes[min(a_new)])
a_new.remove(min(a_new))
return res
假設所有串列都已排序(如示例所示),我們可以以更好的方式解決它。該解決方案基于這樣一個想法,即每個內部串列中的第一個值已經是該串列的最小引數。所以我們只需要搜索它們。代碼:
n = 5
next_possible_mins = [0]*len(a)
indexes = [0]*len(a)
result = []
for i in range(len(a)):
next_possible_mins[i] = a[i][0]
indexes[i] = [0, i]
for i in range(n):
index_min = next_possible_mins.index(min(next_possible_mins))
result.append(indexes[index_min])
indexes[index_min] = [indexes[index_min][0] 1, indexes[index_min][1]]
next_possible_mins[index_min] = a[indexes[index_min][1]][indexes[index_min][0]]
print(result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/352626.html
標籤:Python 蟒蛇-3.x 麻木的 numpy-ndarray 分钟
