我有一個形狀為 2x3 的陣列 A1 和串列 A2。我想從串列中提取陣列的索引值。
例子
A1 = [[0, 1, 2]
[3, 4, 5]] # Shape 2 rows & 3 columns
A2 = [0,1,2,3,4,5]
現在,我想撰寫一個代碼來訪問陣列 A1 中元素的索引
預期產出
A2[3] = (1,0) #(1 = row & 0 = column) Index of No.3 in A1
請幫我。謝謝
uj5u.com熱心網友回復:
這個問題有一些歧義。我們是按值還是按順序查找元素的索引?
解開序數索引
假設中的值A1不重要(即這不是搜索某些值,而是真正找到與位置對應的索引),您可以使用unravel_index它。
例子:
>>> np.unravel_index(3, A1.shape)
(1, 0)
或者,總的來說A2,一次拍攝:
>>> np.unravel_index(A2, np.array(A1).shape)
(array([0, 0, 0, 1, 1, 1]), array([0, 1, 2, 0, 1, 2]))
您可能更喜歡將其作為元組串列(上述的“轉置”):
>>> list(zip(*np.unravel_index(A2, np.array(A1).shape)))
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
搜索值
相反,如果您正在搜索 values,例如,那里的A1值等于A2[i],那么,就像@dc_Bita98 的回答:
>>> tuple(np.argwhere(A1 == A2[3]).squeeze())
(1, 0)
如果您想一次拍攝所有位置,您需要做一些事情來處理形狀不同的事實。為了說明起見,還說:
A3 = np.array([9, 1, 0, 1])
然后,要么:
>>> i, j, k = np.where(A1 == A3[:, None, None])
>>> out = np.full(A3.shape, (,), dtype=object)
>>> out[i] = list(zip(j, k))
>>> out.tolist()
[None, (1, 0), (2, 0), (3, 0)]
這清楚地表明9未找到第一個值 ( ),以及在哪里可以找到其他值。
或者:
>>> [tuple(np.argwhere(A1 == v).squeeze()) for v in A3]
[None, (0, 1), (0, 0), (0, 1)]
uj5u.com熱心網友回復:
如果您可以使用numpy,請查看argwhere
a1 = np.array([[0,1,2],[3,4,5]])
a2 = [0,1,2,3,4,5]
a3 = np.argwhere(a1 == a2[3]).squeeze() # -> (1, 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391884.html
上一篇:Numpypower回傳負值
