У меня есть два словаря, которые я использую в качестве разреженных векторов:Более эффективное решение? Словарь как разреженный вектор
dict1 = {'a': 1, 'b': 4}
dict2 = {'a': 2, 'c': 2}
я написал свою собственную __add__
функции, чтобы получить этот желаемый результат:
dict1 = {'a': 3, 'b': 4, 'c': 2}
Это важно, что я знаю строки «a», «b» и «c» для каждого соответствующего значения. Просто убедитесь, что я добавляю правильные размеры, недостаточно. Я также получу еще много ранее неизвестных строк с некоторыми значениями, которые я только сейчас добавляю к моему словарю.
Теперь мой вопрос: есть ли более эффективная структура данных? Я посмотрел на массивы Numpy и разреженные матрицы Scipy, но насколько я понимаю, на самом деле они не помогают, или я просто не вижу решения?
Я мог хранить ключи и значения в отдельных массивах, но я не думаю, что могу использовать любую уже существующую функцию, чтобы получить желаемый результат.
dict1_keys = np.array([a, b])
dict1_values = np.array([1, 4])
dict2_keys = np.array([a, c])
dict2_values = np.array([2, 2])
# is there anything that will efficiently produce the following?
dict1_keys = np.array([a, b, c])
dict1_values = np.array([3, 4, 2])
ли вам действительно нужны ваши ключи, чтобы быть струнами? У вас есть известное количество ключей или вы хотите обрабатывать слияние/добавление любого возможного ключа? –
Посмотрите на [материал] (http://scikit-learn.org/stable/modules/classes.html#module-sklearn.feature_extraction) в scikti-learn. У меня нет опыта в этом, но я думаю, что он может делать то, что вы хотите. –
Это строки. Я мог бы, конечно, отобразить строки в число, но я не думаю, что это ускорит что угодно. Да, позже будет добавлено больше ключей. – carence