gpt4 book ai didi

python - python 中 'for loops' 的替代方案,运行速度很快

转载 作者:太空宇宙 更新时间:2023-11-04 04:51:39 25 4
gpt4 key购买 nike

在我的 python 脚本中,我有一个 2d numpy 数组(名为 original_data),其中1)我必须找到所有唯一的行2)创建一个空数组3) 将 original_data 中的所有行与此 unique_rows 进行比较,当它与 unique_rows 的任何行匹配时,将该唯一值的特定行的 rowindex 附加到创建的新数组

original_data = np.array([[1, 2, 7, 1, 2, 1],
[1, 2, 7, 1, 2, 1],
[1, 2, 7, 1, 2, 1],
[1, 2, 6, 1, 2, 1],
[1, 3, 5, 1, 1, 1],
[1, 2, 5, 1, 1, 1],
[1, 2, 5, 1, 1, 1],
[1, 2, 5, 1, 1, 1],
[1, 2, 5, 1, 1, 1],
[1, 2, 5, 1, 1, 1]])
y = np.ascontiguousarray(original_data).view(np.dtype((np.void, original_data.dtype.itemsize * original_data.shape[1])))
_, idx = np.unique(y, return_index=True)
unique_rows = original_data[idx]
att = []
for i in range(original_data.shape[0]):
for j in range(unique_rows.shape[0]):
if(np.array_equal(original_data[i],unique_rows[j])):
att.append(j)
break
else:
continue

这运行良好,但如果我考虑大型数据集,那么这个 for 循环不是一个好的选择,因为它需要很长时间才能运行。任何人都可以建议我很好地替代这 2 个运行速度更快的 forloops。

最佳答案

unique 的另一个选项就是这样做的:

y = np.ascontiguousarray(original_data).view(np.dtype((np.void, original_data.dtype.itemsize * original_data.shape[1])))
_, att = np.unique(y, return_inverse=True)

从 numpy 版本 1.13 开始,void dtype 的技巧已成为 unique 的一部分,因此您可以使用新的 axis 关键字参数:

_, att = np.unique(original_data, return_inverse=True, axis=0)

如果您需要它运行得更快,您可以计算行的哈希值并对其进行处理。但是用 numpy 可能很难处理哈希冲突..

关于python - python 中 'for loops' 的替代方案,运行速度很快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48173041/

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