Maple - 将1D列表转换为2D阵列

时间:2012-11-21 16:56:08

标签: list multidimensional-array converter maple

这是Maple的一个问题。 我从java的角度理解我想要一个计数和一个增量,但我的逻辑不能简单地转换为枫木代码。

我有一个非常长的数字列表LIST(196)我希望变成一个14x14数组但是使用转换(LIST,数组)只能给我一个1维数组。

在Maple代码中,这将是我的第一列。

j:=1; 
for i from 1 to 14 do
B[i,j]:=Longlistvalue[i]; 
end do;

很明显,我的第二列来自t = 2,s从15到24,但我正在努力将其置于循环中。

当然,我可以使用一个循环来执行此操作,或者使用一个枫木命令将前14个放入第一行(或列),然后将下一个14放入下一行/列等等?

我最近的尝试让我

B:=Array(1..14,1..14):
n:=1;
m:=14;
for j from 1 to 14 do
  for i from n to m do
     B[i,j]:=Longlistvalue[i];
  end do;
  n:=n+14;
  m:=m+14;
end do;

但是它没有声明我的数组超出范围(因为B [i,j]中的s必须小于15)。

有没有办法通过更有效的循环解决这个问题?

1 个答案:

答案 0 :(得分:1)

可以使用Array(或Matrix)构造函数直接执行此操作,使用运算符来分配条目。

您可以按列或按行将列表条目放入数组中。调整示例以适合您的情况,其中m = 14且n = 14.

m,n := 3,4:

L:=[seq(i,i=1..m*n)]; # you got your list in another way

             L := [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

Array(1..m,1..n,(i,j)->L[(j-1)*m+i]);

                          [1    4    7    10]
                          [                 ]
                          [2    5    8    11]
                          [                 ]
                          [3    6    9    12]

Array(1..m,1..n,(i,j)->L[(i-1)*n+j]);

                         [1     2     3     4]
                         [                   ]
                         [5     6     7     8]
                         [                   ]
                         [9    10    11    12]

您也可以使用嵌套循环。

Longlistvalue:=[seq(i,i=1..14^2)]: # your values will differ, of course

B:=Array(1..14,1..14):
n:=14;
m:=14;
for j from 1 to m do
   for i from 1 to n do
      B[i,j]:=Longlistvalue[(j-1)*m+i];
   end do;
end do:

# so we can see the contents, displayed in full
interface(rtablesize=infinity):

B;