簡體   English   中英

為什么我不能從我的列表中生成 Numpy 陣列? 索引錯誤

[英]Why can't I produce a Numpy Array from my list? Indexing Error

嘗試按照 Scipy 文檔將 linear_sum_assignment function 應用於我的代碼,其中我試圖為每個比薩餅分配 1 個機器人,以便機器人的總行程時間盡可能小。

機器人是 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

就像測試一樣,如果我在PizzaList = np.array([SwapTargets])[row_ind]中將[SwapTargets]替換為["A,"B","C","D","E"]錯誤,但不明白為什么我的 5 個對象列表不起作用。

謝謝來自 python noobie

考慮以下之間的區別:

>>> 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])與上面的第二個示例相同。 它的第一維長度為1 ,因此索引在第一維中以0結束。 您可能想要np.array(SwapTargets)代替。

你幾乎是在回答你自己的問題。 你 state 認為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 項列表的相同 function,這可能是您想要的。

你想寫的實際上是:

PizzaList = np.array(SwapTargets)[row_ind]

(參數周圍沒有括號)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM