【问题标题】:Build numpy matrix from a dictionary with coordinate and value从具有坐标和值的字典中构建 numpy 矩阵
【发布时间】:2018-08-08 10:12:43
【问题描述】:

大家好,我正在尝试从两个字典构建一个 Numpy 矩阵。 第一个 dict 有一个整数键和一个 float64 值;另一个以坐标为键,整数值引用第一个字典的键。

我们的目标是构建一个 Numpy 矩阵,坐标为第二个字典中的键,并为整数键对应的浮点值赋值。

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

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

【问题讨论】:

    标签: python numpy dictionary matrix


    【解决方案1】:

    鉴于您的 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]])
    

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 2011-02-21
      • 2022-01-22
      • 2019-12-20
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多