python - 将具有坐标和值的字典转换为二维数组

标签 python numpy

假设给定下一个字典:

{(0, 0): 1, (1, 1): 12, (2, 2): 802, (3, 3): 1687, (4, 4): 11, (5, 4): 4, (6, 5): 593, (7, 4): 4}

在上面的字典中,每个键显示矩阵 (x, y) 中的一个点,值显示在矩阵中找到的值。我如何构建一个包含位于每个点 xy 的值的数组?

根据上面的字典预期的结果是:

array([[   1,    0,    0,    0,    0,    0],
       [   0,   12,    0,    0,    0,    0],
       [   0,    0,  802,    0,    0,    0],
       [   0,    0,    0, 1687,    0,    0],
       [   0,    0,    0,    0,   11,    0],
       [   0,    0,    0,    0,    4,    0],
       [   0,    0,    0,    0,    0,  593],
       [   0,    0,    0,    0,    4,    0]])

最佳答案

你可以使用 np.add.at ,预先从键定义数组的形状:

d = {(0, 0): 1, (1, 1): 12, (2, 2): 802, (3, 3): 1687, (4, 4): 11, 
     (5, 4): 4, (6, 5): 593, (7, 4): 4}

i,j = zip(*d.keys())
a = np.zeros((max(i)+1,max(j)+1), np.int32)
np.add.at(a, tuple((i,j)), tuple(d.values()))

a
array([[   1,    0,    0,    0,    0,    0],
       [   0,   12,    0,    0,    0,    0],
       [   0,    0,  802,    0,    0,    0],
       [   0,    0,    0, 1687,    0,    0],
       [   0,    0,    0,    0,   11,    0],
       [   0,    0,    0,    0,    4,    0],
       [   0,    0,    0,    0,    0,  593],
       [   0,    0,    0,    0,    4,    0]])

关于python - 将具有坐标和值的字典转换为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64710847/

相关文章:

python - 确定方法的类

python - 处理 numpy 数组规范化中的零

python - 在 python 中保存 .dta 文件

python - 如何在 python 中确保输入参数不是复值而是实值

python - 将 float 更改为不带小数位的字符串

java - 如何在JAR/JAVA包中嵌入python脚本?

Python Selenium(等待框架、元素查找)

python - 使用 ctypes 和 Python 将字符串传递给 Fortran DLL

python - Keras Convolution2D 输入 : Error when checking model input: expected convolution2d_input_1 to have shape

python - 更好的 Python Pandas 解决方案