所以假設我有一個名為的陣列original_arr串列,另一個名為的陣列串列,find_arr我怎樣才能找到original_arr出現的元素的索引find_arr?(我有很多串列要處理)
a = np.arange(27).reshape(9,3)
original_arr = np.split(a,3)
>>> original_arr
>>> [array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]),
array([[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]]),
array([[18, 19, 20],
[21, 22, 23],
[24, 25, 26]])]
b = np.array([[0,1,2],[3,4,5],[12,13,14],[15,16,17],[21,22,23]])
find_arr = np.split(b,np.array([2,2,1]).cumsum()[:-1])
>>> find_arr
>>> [array([[0, 1, 2],
[3, 4, 5]]),
array([[12, 13, 14],
[15, 16, 17]]),
array([[21, 22, 23]])]
所以我嘗試了下面的代碼,但它不起作用
index = np.empty((0,2),int)
for i in range (len(find_arr)):
for j in range (len(find_arr[i])):
m = np.where((original_arr[i] == find_arr[i][j]).all(axis=1))
index = np.append(index,m,axis=0)
我期望輸出是什么(例如,因為[0, 1, 2]infind_arr出現在original_arr[0][0],所以輸出應該是[0,0]or [[0],[0]]):
array[[[0,0],[0,1]],
[[1,1],[1,2]],
[[2,1]]]
or
array[[[[0],[0]],[[0],[1]]],
[[[1],[1]],[[1],[2]]],
[[[2],[1]]]]
誰能檢查我的代碼哪里錯了?或者有沒有更簡單的方法來做到這一點?
uj5u.com熱心網友回復:
您想將行號 , 附加i到m, 但m型別不同。因此,從np.where(..)[0][0]下面獲取輸出并i在插入之前將其附加到index.
for i in range (len(find_arr)):
for j in range (len(find_arr[i])):
m = np.where((original_arr[i] == find_arr[i][j]))[0][0]
index = np.append(index,[[i, m]],axis=0)
另一種可能更快的選擇是這樣使用np.nonzero(..==..)[0][0]:
m = np.nonzero((original_arr[i] == find_arr[i][j]))[0][0]
兩者都將輸出:
[[0 0]
[0 1]
[1 1]
[1 2]
[2 1]]
如您所料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479483.html
下一篇:繪制Z取決于X和Y向量的曲面
