嗨,大家好,我想从两个字典中构建一个Numpy矩阵。
第一个dict有一个整数键和一个float64值;另一个具有坐标作为键,并且整数值引用第一个字典的键。

目标是构建一个Numpy矩阵,并在第二个dict中协调键并为与整数键对应的float值赋值。

dict_coord = {(0,0): 1, (0,1): 0, (0,2): 2,
              (1,0): 1, (1,1): 1, (1,2): 0,
              (2,0): 1, (2,1): 2, (2,2): 0}

dict_values = {0: 1.1232.., 1: 0.3523.., 2: -1.2421..}

result = np.array([[0.3523,1.1232,-1.2421],
                   [0.3523,0.3523,1.1232],
                   [0.3523,-1.2421,1.1232]])


我找到了最简单的解决方案,但是它太慢了。我正在处理具有300 x 784个单元的矩阵,该算法大约需要110毫秒才能完成。

import numpy as np

def build_matrix(dict_index,dict_values):
    mat_ret = np.zeros([300,784])
    for k,v in dict_index.items():
        mat_ret[k] = dict_values[v]
    return mat_ret


如果您能帮助我找到一个更好而又简单的解决方案,我将不胜感激!

最佳答案

假设您的dict_coord键始终以这种方式排序,则可以将两个字典都简单地转换为数组,然后将另一个字典索引在一起:

coord_array = np.asarray(list(dict_coord.values()))
values_array = np.asarray(list(dict_values.values()))

values_array[coord_array].reshape(3, 3)
# array([[ 0.3523,  1.1232, -1.2421],
#        [ 0.3523,  0.3523,  1.1232],
#        [ 0.3523, -1.2421,  1.1232]])

关于python - 从具有坐标和值的字典构建numpy矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51744093/

10-11 22:41
查看更多