更有效的解决方案?作为稀疏向量的字典
More efficient solution? Dictionary as sparse vector
我有两个字典用作稀疏向量:
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])
也许 pandas 就是您要找的:
d1 = pandas.DataFrame(numpy.array([1, 4]), index=['a', 'b'], dtype="int32")
d2 = pandas.DataFrame(numpy.array([2, 2]), index=['a', 'c'], dtype="int32")
d1.add(d2, fill_value=0)
结果:
0
a 3
b 4
c 2
@sirfz 的 可以是单行使用 pandas Series
:
>>> pd.Series(dict1).add(pd.Series(dict2), fill_value=0)
a 3.0
b 4.0
c 2.0
或者如果您的 API 需要 dict
s
>>> dict(pd.Series(dict1).add(pd.Series(dict2), fill_value=0))
{'a': 3.0, 'b': 4.0, 'c': 2.0}
此外,这应该处理 dict
s 或 Series
s 甚至 scipy
稀疏矩阵行和 sklearn
Vectorizer
输出的混合输入(稀疏vectors/mappings)
我有两个字典用作稀疏向量:
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])
也许 pandas 就是您要找的:
d1 = pandas.DataFrame(numpy.array([1, 4]), index=['a', 'b'], dtype="int32")
d2 = pandas.DataFrame(numpy.array([2, 2]), index=['a', 'c'], dtype="int32")
d1.add(d2, fill_value=0)
结果:
0
a 3
b 4
c 2
@sirfz 的 Series
:
>>> pd.Series(dict1).add(pd.Series(dict2), fill_value=0)
a 3.0
b 4.0
c 2.0
或者如果您的 API 需要 dict
s
>>> dict(pd.Series(dict1).add(pd.Series(dict2), fill_value=0))
{'a': 3.0, 'b': 4.0, 'c': 2.0}
此外,这应该处理 dict
s 或 Series
s 甚至 scipy
稀疏矩阵行和 sklearn
Vectorizer
输出的混合输入(稀疏vectors/mappings)