如何查找 NumPy 数组中多个值的行索引?
NumPy 提供了多种方法来查找 NumPy 数组中指定值的行索引:
方法#1:NumPy广播
result = np.where((X==searched_values[:,None]).all(-1))[1]
方法#2:使用 np.ravel_multi_index 的内存高效方法
dims = X.max(0) + 1 out = np.where(np.in1d(np.ravel_multi_index(X.T,dims),\ np.ravel_multi_index(searched_values.T,dims)))[0]
方法#3:内存高效接近与np.searchsorted
dims = X.max(0) + 1 X1D = np.ravel_multi_index(X.T,dims) searched_valuesID = np.ravel_multi_index(searched_values.T,dims) sidx = X1D.argsort() out = sidx[np.searchsorted(X1D,searched_valuesID,sorter=sidx)]
理解 np.ravel_multi_index
np.ravel_multi_index 将多维索引元组转换为网格的线性索引。它假设每一列代表一个维度,并使用网格形状来计算线性索引。
例如,使用 X:
X = np.array([[4, 2], [9, 3]])
且 dims = [10, 7],第一行X (4, 2) 的值被转换为线性索引 30。这对应于grid:
dims = X.max(0) + 1 # [10, 7] np.ravel_multi_index(X.T, dims) # [30, 66]
为唯一线性索引选择尺寸
为了确保唯一线性索引,网格的尺寸应设置为每个轴的最大拉伸输入数组 X。这可以通过将 X 中每列的最大值加 1 来实现。
以上是如何高效查找 NumPy 数组中多个值的行索引?的详细内容。更多信息请关注PHP中文网其他相关文章!