问题是如何使这不是非常低效。我看到两种方法
-
使用词典以便快速查找。
numpy
数组是可变的,因此不可散列,因此您必须将它们转换为要与字典一起使用的元组。
-
使用广播检查
value_list
每一把钥匙
key_list
以矢量化的方式。这至少会将for循环从python中取出,但是您仍然需要将每个值与每个键进行比较。
我也要假设
密钥列表
只有唯一的“钥匙”。
以下是第一种方法:
value_list = np.array([[2,2,3],[255,243,198],[2,2,3],[50,35,3]])
key_list = np.array([[2,2,3],[255,243,198],[50,35,3]])
key_map = {tuple(key): i for i, key in enumerate(key_list)}
result = np.array([key_map[tuple(value)] for value in value_list])
result # array([0, 1, 0, 2])
下面是第二个:
result = np.where((key_list[None] == value_list[:, None]).all(axis=-1))[1]
result # array([0, 1, 0, 2])
哪种方式更快取决于
密钥列表
和
价值列表
. 我会给你们两种尺寸的阵列时间。
编辑-如评论中所述,第二个解决方案似乎并不完全正确,但我不确定是什么导致它失败。考虑使用第一种解决方案。