这是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)。
有没有办法通过更有效的循环解决这个问题?
答案 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;