嘗試按照 Scipy檔案將 linear_sum_assignment 函式應用于我的代碼,其中我嘗試為每個披薩分配 1 個機器人,以便機器人的總行程時間盡可能小。
Robots 是一個包含 6 個機器人物件的串列,我故意忽略了其中的第一個機器人。SwapTargets 是 5 個 Pizza 物件的串列
newlist = []
for j in range(1,len(Robots)):
for i in range(0,len(SwapTargets)):
ref_x = SwapTargets[i].coordinates[0]
ref_y = SwapTargets[i].coordinates[1]
value = ((ref_x - Robots[j].x)**2) (ref_y - Robots[j].y)**2
newlist.append(value)
myarray = np.array(newlist).reshape(len(Robots[1:]),len(SwapTargets))
from scipy.optimize import linear_sum_assignment
row_ind, col_ind = linear_sum_assignment(myarray)
PizzaList = np.array([SwapTargets])[row_ind]
RobotList = np.array([Robots[1:]])[col_ind]
result = dict(zip(PizzaList, RobotList))
print(result)
在PizzaList = np.array([SwapTargets])[row_ind]
我收到錯誤IndexError: index 1 is out of bounds for axis 0 with size 1
作為測驗,如果我[SwapTargets]用["A,"B","C","D","E"]in替換,PizzaList = np.array([SwapTargets])[row_ind]我不會出錯,但不明白為什么我的 5 個物件串列不起作用。
來自 python noobie 的 Thx
uj5u.com熱心網友回復:
你幾乎是在回答你自己的問題。您宣告SwapTargets 是 5 個 Pizza 物件的串列。這意味著它可以像這樣初始化:
SwapTargets = [pizza0, pizza1, pizza2, pizza3, pizza4, pizza5]
然后你在執行時說:
PizzaList = np.array(["A", "B", "C", "D", "E"])[row_ind]
作業,執行
PizzaList = np.array([SwapTargets])[row_ind]
才不是。要了解發生了什么,只需將 的初始化替換SwapTargets為識別符號,上述內容變為:
PizzaList = np.array([[pizza0, pizza1, pizza2, pizza3, pizza4, pizza5]])[row_ind]
看到雙嵌套括號了嗎?
這里發生的事情是您正在呼叫np.array()只有一個專案的串列(該專案本身是一個包含 5 個專案的串列)。在成功呼叫中,您呼叫了包含 5 個專案的串列的相同函式,這可能正是您想要的。
你想寫的實際上是:
PizzaList = np.array(SwapTargets)[row_ind]
(引數周圍沒有括號)。
uj5u.com熱心網友回復:
考慮以下之間的區別:
>>> numpy.array([1,2,3])
array([1, 2, 3])
和
>>> numpy.array([[1,2,3]])
array([[1, 2, 3]])
第一個是長度為 的向量3,第二個是維度為 的矩陣(1, 3)。您可以通過檢查shape兩者來看到:
>>> numpy.array([1,2,3]).shape
(3,)
>>> numpy.array([[1,2,3]]).shape
(1, 3)
np.array([SwapTargets])與上面的第二個示例相同。它的第一個維度是 length 1,因此索引0在第一個維度結束。你可能想要np.array(SwapTargets)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391869.html
上一篇:尋找方塊圖的脈沖回應
下一篇:水平分割Python陣列操作
