gpt4 book ai didi

python - 替换大量数组中的值(性能)

转载 作者:行者123 更新时间:2023-12-01 03:49:07 26 4
gpt4 key购买 nike

我在使用字典替换数组列表的值时遇到性能问题。

假设这是我的字典:

# Create a sample dictionary

keys = [1, 2, 3, 4]
values = [5, 6, 7, 8]
dictionary = dict(zip(keys, values))

这是我的数组列表:

# import numpy as np

# List of arrays
listvalues = []

arr1 = np.array([1, 3, 2])
arr2 = np.array([1, 1, 2, 4])
arr3 = np.array([4, 3, 2])

listvalues.append(arr1)
listvalues.append(arr2)
listvalues.append(arr3)

listvalues
>[array([1, 3, 2]), array([1, 1, 2, 4]), array([4, 3, 2])]

然后,我使用以下函数使用字典替换 nD numpy 数组中的所有值:

# Replace function

def replace(arr, rep_dict):

rep_keys, rep_vals = np.array(list(zip(*sorted(rep_dict.items()))))
idces = np.digitize(arr, rep_keys, right=True)

return rep_vals[idces]

这个函数确实很快,但是我需要迭代我的数组列表以将此函数应用于每个数组:

replaced = []
for i in xrange(len(listvalues)):
replaced.append(replace(listvalues[i], dictionary))

这是该过程的瓶颈,因为它需要迭代数千个数组。

如果不使用 for 循环,我怎样才能达到相同的结果?重要的是结果与输入的格式相同(具有替换值的数组列表)

非常感谢大家!!

最佳答案

使用 numpy_indexed 可以有效地完成这个任务。包裹。如果保证“listvalues”中的所有值都出现在“keys”中,则可以进一步简化;但我会将其作为练习留给读者。

import numpy_indexed as npi
arr = np.concatenate(listvalues)
idx = npi.indices(keys, arr, missing='mask')
remap = np.logical_not(idx.mask)
arr[remap] = np.array(values)[idx[remap]]
replaced = np.array_split(arr, np.cumsum([len(a) for a in listvalues][:-1]))

关于python - 替换大量数组中的值(性能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38508116/

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