2012-11-21 3 views
0

이것은 Maple의 질문입니다. 자바의 관점에서 카운트와 증가가 필요하지만 내 논리는 단순히 메이플 코드로 변환되지 않는다는 것을 이해합니다.Maple - 1D 목록을 2D 배열로 변환

저는 LIST (196)라는 숫자가 매우 길어서 14x14 배열로 바꾸고 싶지만 convert (LIST, Array)를 사용하면 1 차원 배열 만됩니다.

메이플 코드에서 첫 번째 열이 표시됩니다.

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

제 두 번째 열은 t = 2에서 비롯되고 15에서 24까지입니다. 그러나 이것을 루프에 넣으 려합니다.

분명히 내가 이것을 사용할 수있는 루프 나 처음 14 개를 첫 번째 행 (또는 열)에 넣고 다음 14 개를 다음 행/열 등으로 넣는 maple 명령이 있습니까?

내 가장 최근의 시도는 나에게

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]에서의 적은 15보다해야하기 때문에)하지 내 배열 범위를 벗어 상태.

보다 효율적인 루프를 통해이를 해결할 수있는 방법이 있습니까?

답변

1

배열 (또는 행렬) 생성자를 사용하여 연산자를 사용하여 항목을 할당 할 수 있습니다.

목록 항목을 배열 또는 행별로 배치 할 수 있습니다. 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; 
관련 문제