Animated gif of random green letters with random red J, M, and P characters임의의 빨간색 J, M, P 문자가 포함된 임의의 녹색 문자로 구성된 애니메이션 gif
JMP에는 JSL 스크립팅 언어로 된 강력한 행렬 기본 요소 세트가 있습니다. 다음은 JSL에서 1D 및 2D 행렬을 만들고 사용하는 방법을 소개합니다.
3행 x 2열 행렬의 JSL 행렬 상수는 다음과 같습니다. 행의 요소 사이의 공백과 행 사이의 쉼표를 확인하세요.
constant = [
1 2,
3 4,
5 6
];
해당 코드를 실행하면 로그 창에 다음과 같이 표시됩니다(한 줄에도 작성할 수 있습니다).
[1 2, 3 4, 5 6]
대괄호는 JSL이 구문 분석될 때 생성되는 상수를 정의합니다. 변수가 존재하기 전에 파서가 실행되므로 대괄호 사이에 다른 JSL 변수를 사용할 수 없습니다(자세한 내용은 나중에 설명). 1D 행렬을 사용하는 두 가지 추가 예:
RowVector = [1 2];
ColVector = [3,4];
JSL에는 행렬을 생성하는 여러 기능이 있습니다. 나는 보통 J(nRows, nCols, init)를 사용하고 세 번째 초기화 값은 0입니다.
squareOnes = J(5);
[1 1 1 1 1,
1 1 1 1 1,
1 1 1 1 1,
1 1 1 1 1,
1 1 1 1 1]
diagOnes = identity(5);
[1 0 0 0 0,
0 1 0 0 0,
0 0 1 0 0,
0 0 0 1 0,
0 0 0 0 1]
colsAndRows = J(3,2,random integer(1,6));
[2 6, 2 5, 5 2]
값을 가로 또는 세로로 연결하여 행렬을 만들 수도 있습니다. 동일한 연결 연산자는 호환 가능한 크기(여기에는 표시되지 않음)를 갖는 행렬을 연결합니다.
a=1;b=2;c=3;d=4;e=5; // now we can use variables as follows
row1 = a::e; // row
[1 2 3 4 5]
col1 = (a::e)`; // column - transpose operator
[1, 2, 3, 4, 5]
row2 = a||22||c||44||e; // row - concatenate horizontal
[1 22 3 44 5]
col2 = a|/222|/c|/444|/e; // column - concatenate vertical
[1, 222, 3, 444, 5]
아주 작은 ` 문자는 미국 키보드의 왼쪽 상단에 있으며 행렬 전치 연산자입니다. :: 연산자는 정수 행렬을 만듭니다. 스칼라를 곱하고 스칼라를 추가하여 필요한 결과 행렬을 얻을 수 있습니다.
(0::9)*.1+100
[100 100.1 100.2 100.3 100.4 100.5 100.6 100.7 100.8 100.9]
행렬은 일반적인 방식으로 첨자화됩니다. 행렬 첨자는 일부 언어처럼 0이 아닌 JSL에서 1부터 시작합니다.
M = [
11 12 13 14 15,
21 22 23 24 25,
31 32 33 34 45
];
write(M);
[ 11 12 13 14 15,
21 22 23 24 25,
31 32 33 34 45]
write(M[2,3])
23
그리고 강력한 방법으로 썰고 깍둑썰기할 수 있습니다.
write(M[2::3, 1::2]); // return a 2x2 sub-matrix
[21 22, 31 32]
write(M[1,0]); // 0 means the entire dimension
[11 12 13 14 15]
write(M[0,2::3]); // various combinations
[12 13, 22 23, 32 33]
JSL에는행 또는 열 벡터를 2D 행렬로 재형성하는 데 유용한 Shape라는 행렬 함수가 있습니다. 행렬에는 두 개의 곱셈 연산자가 있는데, 하나는 행렬 대수 곱셈( m1 * m2 )에 사용되고 다른 하나는 요소별 곱셈에 사용됩니다.
[1 2, 3 4]
[2 3, 4 5]
[2 6, 12 20]
두 이미지를 곱하여 예상치 못한 결과가 나오면
연산자를 기억하세요!
행렬 요소나 조각에도 값을 할당할 수 있습니다.
mat = J(2,3,.); // 2 rows, three columns, all missing
mat[1,1] = 7; // the top left corner
mat[0,2::3] = [5 9, 13 15]; // all rows, columns 2 and 3
write(mat); // notice the missing value that never got set
[7 5 9, . 13 15]
마지막으로 주제와 거의 관련이 없는 애니메이션 gif에 대한 코드는 다음과 같습니다. 이는 이미지와 문자를 조작하기 위해 놀라운 방법으로 행렬을 사용하며 아마도 시작하고 싶은 예가 아닐 것입니다.
matgif = "$desktop/mat.gif";
gb = Graph Box(framesize(500,300));
gb << setBackgroundColor( "black" );
gb << setGraphicsScript(
Text Color( "green" );
For( x = -10, x <= 110, x += Random Integer( 2, 4 ),
For( y = -10, y <= 110, y += Random Integer( 3, 7 ),
c = random integer(31,1000);
textcolor("green");
if( random integer(1,10000)<60,
textcolor("red");
c = blobtomatrix(chartoblob(substr("JMP", random integer(1,3),1)),"uint",1,"big")
);
Text( {x, y}, blobtochar(matrixtoblob(c::c,"uint",2,"big"),encoding="utf-16be") )
);
);
);
New Window( "x", gb );
duration=80;//ms
animation = gb[framebox(1)]<<GETPICTURE></GETPICTURE>
<P> </P>https://community.jmp.com/t5/Discussions/Near-neighbors-mean-calculation/mp/345727#M59633 에는 행렬 M3을 다른 행렬 indexer2x2로 인덱싱하여 다음의 하위 행렬을 얻는 예가 있습니다. M3. 이 예제는 인접한 직사각형 영역을 가져와서 2D 행렬로 반환하도록 설계되었지만 인덱서는 순서에 관계없이 모든 요소 집합을 가져올 수 있으며 항목의 1D 행렬을 원하는 경우 Shape() 함수는 선택 사항입니다.
M3 = [. . . . . . . . .,
. . . . . . . . .,
. . . . . . . . .,
. . . 1 2 3 . . .,
. . . 4 5 6 . . .,
. . . 7 8 9 . . .,
. . . . . . . . .,
. . . . . . . . .,
. . . . . . . . .];
indexer2x2 = [1 2 10 11]; // top left 2x2 sub-matrix
For( x = 2, x <= 5, x += 1,
For( y = 2, y <= 5, y += 1,
Write( "\!n ", x, " ", y, " ", Shape( M3[indexer2x2 + x + y * 9], 2 ) );
)
);
2 2 [. ., . 1]
2 3 [. 1, . 4]
2 4 [. 4, . 7]
2 5 [. 7, . .]
3 2 [. ., 1 2]
3 3 [1 2, 4 5]
3 4 [4 5, 7 8]
3 5 [7 8, . .]
4 2 [. ., 2 3]
4 3 [2 3, 5 6]
4 4 [5 6, 8 9]
4 5 [8 9, . .]
5 2 [. ., 삼 .]
5 3 [3 ., 6 .]
5 4 [6 ., 9 .]
5 5 [9 ., . .]