您好我正在嘗試在包含多個 2d 陣列的陣列中執行搜索操作,將它的 itens 與特定陣列進行比較。我設法使用for回圈遍歷大陣列中的itens來做到這一點,但是我必須執行此搜索10 ^ 6次,并且此for回圈的長度可以增長到2 ^ 100,因此變得非常耗時。我想知道是否有一種方法可以使用 np.where 或 np.isin() 函式加快搜索速度。
這是較慢作業方法的示例
import numpy as np
frequencies = {}
b = np.array ([[0, 0, 0], [0, 0, 0], [1, 1, 1]]) #template
a = np.array([[[1, 1, 1], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [1, 1, 1], [0, 0, 0]],[[0, 0, 0], [0, 0, 0], [1, 1, 1]],[[0, 0, 1], [0, 0, 1], [0, 0, 1]],[[0, 1, 0], [0, 1, 0], [0, 1, 0]],[[1, 0, 0], [1, 0, 0], [1, 0, 0]]])
#I need to know if b is inside a and the index where it its located
for I in range (a):
if np.all(b==a[I]):
frequencies [I] = frequencies [I] 1
我想做這樣的東西。我需要在字典頻率的索引c中存盤在a中找到b的索引
import numpy as np
frequencies = {}
b = np.array ([[0, 0, 0], [0, 0, 0], [1, 1, 1]]) #template
a = np.array([[[1, 1, 1], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [1, 1, 1], [0, 0, 0]],[[0, 0, 0], [0, 0, 0], [1, 1, 1]],[[0, 0, 1], [0, 0, 1], [0, 0, 1]],[[0, 1, 0], [0, 1, 0], [0, 1, 0]],[[1, 0, 0], [1, 0, 0], [1, 0, 0]]])
c = np.where(np.all(b==a))
frequencies [c] = frequencies [c] 1
uj5u.com熱心網友回復:
您可以使用NumPy.all雙軸,然后NumPy.argwhere用于查找索引,如下所示:
b = np.array ([[0, 0, 0], [0, 0, 0], [1, 1, 1]])
a = np.array([[[1, 1, 1], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [1, 1, 1], [0, 0, 0]],[[0, 0, 0], [0, 0, 0], [1, 1, 1]],[[0, 0, 1], [0, 0, 1], [0, 0, 1]],[[0, 1, 0], [0, 1, 0], [0, 1, 0]],[[1, 0, 0], [1, 0, 0], [1, 0, 0]]])
np.all(b == a, axis=(-1))
# array([[False, True, False],
# [ True, False, False],
# [ True, True, True],
# [False, False, False],
# [False, False, False],
# [False, False, False]])
np.all(b == a, axis=(-1,1))
# array([False, False, True, False, False, False])
indexs = np.argwhere(np.all(b == a, axis=(-1, 1)))
輸出:
>>> indexs
array([[2]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456735.html
