首页 > 解决方案 > 使用 Multidict 将 Numpy 数组转换为字典

问题描述

我有一段代码以 Numpy 数组格式生成矩阵,其中第一列包含一个指示索引的变量,其他列包含其他变量。

我想将其转换为字典,其中矩阵的每一行都成为一个条目,其中第一列值(索引)作为键,其他列变量作为具有相同键的值。

所以像:

matrix = np.array([ [1, a,b,c], [2, d,e,f], [3, g,h,i] ])

应该成为一个字典格式:

{1: a, b, c
 2: d, e, f
 3: g, h, i}

每个a, d, g人都有相同的钥匙,b, e, h有相同的钥匙等。

使用multidict(因为我在 Gurobi 中使用优化模型的代码),我已经能够使用以下命令对一行执行此操作:

key1,value1,value2,value3 = gurobipy.multidict({tuple(matrix[0,0]):tuple(matrix[0,1:]))})

但是我不能让它适用于矩阵的所有行。如果我将行的索引从 0 更改为全部:

key,value1,value2,value3 = gurobipy.multidict({tuple(matrix[:,0]):tuple(matrix[:,1:]))})

我收到一个错误“没有足够的值来解包”。似乎值的第二个参数tuple(matrix[:,1:]), 没有(正确)解析每行中的所有列条目1:end

如果我为每个值指定列索引,它确实有效:

key1,value1,value2,value3 = gurobipy.multidict({tuple(matrix[:,0]):[tuple(matrix[:,1]),tuple(matrix[:,2]),tuple(matrix[:,3])]})

但是,这对我来说并不可靠,因为列的数量可能会发生变化。因此,相反,我希望每一行的代码都将第一列索引值作为主要的唯一键,并将所有后续列变量作为每列具有相同键的值。

有没有办法重写我损坏的代码来实现这一点?

标签: pythonnumpydictionarygurobi

解决方案


推荐阅读