![](/img/trans.png)
[英]Why Can't Numpy Produce an Array from a List of Numpy Arrays?
[英]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.