在GAMS中将二维数组转换为一维
convert two dimensional array into one dimensional in GAMS
我在 gams 中有一个二维数组,我想将其转换为一维数组。
即
我有
set i /i1*i100/
set j /j1*j100/
parameter array(i,j)
现在我想要这样的东西:
set n /n1*n10000/
parameter one_dim_array(n)
并且上述数组的所有元素都应成为 one_dim_array 的元素,方法是遍历所有行和所有列并写出值。
我试过了:
parameter index /0/
loop(i,
loop(j,
one_dim_array(n%index%) = array(i,j);
index = index + 1;
))
然而,GAMS 似乎不理解这个 n%index% 符号和 returns 一个错误,它不是一个集合。有什么办法可以规避这个吗?
非常感谢!
您可以使用匹配运算符 (http://www.gams.com/help/index.jsp?topic=%2Fgams.doc%2Fuserguides%2Fmccarl%2Fdefining_a_tuple_with_the_matc.htm) 在 n 和 i,j 之间建立映射,它可以像这里一样用于赋值:
set i /i1*i100/
j /j1*j100/
n /n1*n10000/
nijMap(n,i,j) /#n:(#i.#j)/;
parameter array(i,j)
one_dim_array(n);
array(i,j) = uniform(0,1);
one_dim_array(n) = sum(nijMap(n,i,j), array(i,j));
希望对您有所帮助!
最好,
卢茨
我在 gams 中有一个二维数组,我想将其转换为一维数组。
即 我有
set i /i1*i100/
set j /j1*j100/
parameter array(i,j)
现在我想要这样的东西:
set n /n1*n10000/
parameter one_dim_array(n)
并且上述数组的所有元素都应成为 one_dim_array 的元素,方法是遍历所有行和所有列并写出值。
我试过了:
parameter index /0/
loop(i,
loop(j,
one_dim_array(n%index%) = array(i,j);
index = index + 1;
))
然而,GAMS 似乎不理解这个 n%index% 符号和 returns 一个错误,它不是一个集合。有什么办法可以规避这个吗?
非常感谢!
您可以使用匹配运算符 (http://www.gams.com/help/index.jsp?topic=%2Fgams.doc%2Fuserguides%2Fmccarl%2Fdefining_a_tuple_with_the_matc.htm) 在 n 和 i,j 之间建立映射,它可以像这里一样用于赋值:
set i /i1*i100/
j /j1*j100/
n /n1*n10000/
nijMap(n,i,j) /#n:(#i.#j)/;
parameter array(i,j)
one_dim_array(n);
array(i,j) = uniform(0,1);
one_dim_array(n) = sum(nijMap(n,i,j), array(i,j));
希望对您有所帮助! 最好, 卢茨