0

这是 Maple 中的一个问题。我在 java 方面理解我想要一个计数和一个增量,但我的逻辑并没有简单地转换为 maple 代码。

我有一个很长的数字列表(196),我希望将其转换为 14x14 数组,但使用 convert(LIST,Array) 只会给我一个一维数组。

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

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

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

当然,我可以使用一个循环,或者一个 maple 命令将前 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)。

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

4

1 回答 1

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;
于 2012-11-21T18:14:45.893 回答