gpt4 book ai didi

python - 使用另一个列表 python 从列表创建索引值数组

转载 作者:行者123 更新时间:2023-12-01 08:16:14 25 4
gpt4 key购买 nike

我有一个值数组以及另一个我想为其创建索引的数组。例如:

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]])
MagicFunction(value_list,key_list)
#result = [[0,1,0,2]] which has the same length as value_list

我在研究后在网上看到的解决方案并不完全是我所要求的,我相信,任何帮助将不胜感激!我有这个提供结果的强力代码,但我什至不想在我的实际数据大小上测试它

T = np.zeros((len(value_list)), dtype = np.uint32)
for i in range(len(value_list)):
for j in range(len(key_list)):
if sum(value_list[i] == key_list[j]) == 3:
T[i] = j

最佳答案

问题是如何让它不那么低效。我看到两种方法

  1. 使用字典以便查找速度更快。 numpy 数组是可变的,因此不可散列,因此您必须将它们转换为例如与字典一起使用的元组。

  2. 使用广播以矢量化方式检查 value_listkey_list 中的每个“键”。这至少会将 for 循环带出 Python,但您仍然必须将每个值与每个键进行比较。

我在这里也假设key_list只有唯一的“键”。

以下是第一种方法的方法:

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])

哪种方式更快可能取决于key_listvalue_list的大小。我会为您计算典型大小的数组的时间。

编辑 - 正如评论中所述,第二个解决方案似乎并不完全正确,但我不确定是什么导致它失败。考虑改用第一个解决方案。

关于python - 使用另一个列表 python 从列表创建索引值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com