查找 Numpy 数组中多个值的行索引
问题:
我们给定一个 NumPy 数组 X 和一组值 searched_values。目标是确定 X 中与 searched_values 中的每个值相对应的行索引。
例如,对于以下输入数组:
X = np.array([[4, 2], [9, 3], [8, 5], [3, 3], [5, 6]]) searched_values = np.array([[4, 2], [3, 3], [5, 6]])
所需的输出应该是:
[0, 3, 4]
方法#1:NumPy广播
此方法利用 NumPy 广播在 X 与每行 searched_values 之间执行逐元素比较:
np.where((X == searched_values[:, None]).all(-1))[1]
方法 #2:使用 np 进行内存高效转换.in1d
为了节省内存,我们可以转换每一行将 X 和 searched_values 转换为线性索引等价物,然后应用 np.in1d 进行交集:
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
另一种内存高效转换使用 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 的每一行转换为唯一的线性索引等价物。它对 n 维索引的 2D 数组以及这些索引要映射到的 n 维网格的形状进行操作。
例如,在我们的示例中,X 的每一行代表一个索引元组对于尺寸变暗的 2D 网格。 np.ravel_multi_index 将每个元组映射到唯一的线性索引。
以上是如何在 NumPy 数组中查找多个值的行索引?的详细内容。更多信息请关注PHP中文网其他相关文章!