행렬을 위한 더 강력한 내장 라이브러리 함수기능 1 : 행렬 간 공통 및 비공통 요소를 찾는 기능
두 개 이상의 행렬에 요소의 수가 홀수일 때 공통 요소와 흔하지 않은 요소를 판별할 수 있는 내장 함수가 있는지 모르겠습니다. JSL에서 이를 달성할 수 있는 유일한 방법은 실제로 데이터를 데이터 테이블에 넣는 것 외에는 다음과 같습니다.
A = Associative Array(Random Index(10,6));
Show(A);
B = Associative Array(Random Index(10,6));
Show(B);
Intersection = A ;
Intersection << Intersect(B);
Print(Intersection << Get Keys);
@gzmorgan0가 아래에 보여준 접근 방식은 동일한 수의 요소를 갖는 행렬에만 적용됩니다.
기능 2 : 요소의 위치를 유지하면서 행렬을 정렬하는 기능( https://community.jmp.com/t5/Discussions/Sort-a-matrix/mp/85678#M38246 )
자동화 및 스크립팅Re: 매트릭스에 대한 강력한 내장 라이브러리 기능@gzmorgan0 저는 이 LFunc 기능이 정말 마음에 듭니다.
Re: 매트릭스에 대한 강력한 내장 라이브러리 기능@uday_guntupalli IsMember() 함수 또는 Intersect에 대한 귀하의 제안 제안이 좋은 것이라고 생각합니다. 그러나 귀하의 예는 행렬, 숫자 값만 참조합니다. 이것은 모든 유형 객체의 목록에 좋은 기능입니다.오랜 위시리스트 항목에는 집합의 합집합과 교집합, 목록의 각 항목에 문자열 및 목록 기능을 적용하는 기능이 포함됩니다. JSL Companion 2판의 관련 스크립트에는 합집합 및 교차, Like 및 LFunc라는 함수에 대한 코드가 포함되어 있습니다. 일반적으로 사용되는 사용자 지정 함수의 스크립트를 만들고 Include( "mypath/myfuncs.jsl" ); 코드와 함께 포함할 수 있습니다. . 그런 다음 스크립트에서 사용하십시오. 이러한 기능이 내장되어 있으면 좋을 것입니다.아래는 에 대한 설명입니다. LFunc 그리고 좋다 귀하의 예제에서 해당 기능을 사용한 결과.광범위한 설명과 예제로 이 두 함수를 정의하는 스크립트의 이름은 다음과 같습니다. JSLC_CustomListFunctions.jsl 원래 위치에 대한 요청과 관련하여 열 정렬 행렬의 경우 Ian의 정렬을 간단하게 수정하고 Rank() 함수를 사용하면 오늘 원하는 것을 얻을 수 있습니다.
여기에 정의된 기능은 다음과 같습니다.
- LFunc( mylist, expr); 여기서 식은 expr(Substr(x,1,1))과 같습니다.
- Like(SourceStr,SearchStr); 두 인수 모두 텍스트/문자열입니다. 두 번째 인수는 % 및 *를 와일드카드로 사용합니다. 이것은 단순화된 정규식입니다.
LFunc는 for-loop 작성을 저장할 수 있고 Like는 REGEX 구문을 찾는 것을 저장할 수 있습니다.
A = {5,3,4,2};
B = {2,4,4,4,6,8};
_xx = LFunc(A, expr(Loc(B,x))); //returns {[], [], [2, 3, 4], [1]}
_yy = LFunc(A, expr(Contains(B,x)>0 ) ); //returns {0, 0, 1, 1}
_zz = LFunc(B, expr(Contains(A,x))); //returns {4, 3, 3, 3, 0, 0}
LFUNC
//------LFunc-------------------------------------------------------------------
Lfunc = Function( {xList, fExpr/*ex. Expr(Contains(x,"h"))*/},
{x = {}, i = 1, errCode = 0, errStr = "\!NError bad argument", newExpr},
If( !Is List( xList ),
errCode = 1
);
If(
Type( Name Expr( fExpr ) ) == "Name",
//if Name then JMP does not recognize the function
tmp = Trim( Char( Name Expr( fExpr ) ) );
//extract the function and check if it is contained in the global namespace, if not error!
If( Namespace( "global" ) << Contains( Word( 1, tmp, ":(" ) ) == 0,
errCode = errCode + 2
);,
Type( Name Expr( fExpr ) ) != "Expression", errCode = errCode + 2
);
//catches typos, returns Name if not a valid function
//catches typos, returns Name if not a valid function
If( !Is Expr( Name Expr( fExpr ) ),
errCode = errCode + 2
); //catches syntax
If(
!errCode,
For( i = 1, i <= N Items( xList ), i++,
newExpr = Substitute( Name Expr( fExpr ), Expr( x ), xList[i] );
Insert Into( x, Try( newExpr, Empty() ) );
),
errCode == 1, Write( errStr || "(1) not a list \!N" ),
errCode == 2, Write( errStr || "(2) not a valid expression \!N" ),
errCode == 3, Write( errStr || "s (1) is not a list and (2) is not a valid expression \!N" )
);
x//return x
;
); //End Lfunc
//------------------------------------------------------------------------------
Re: 매트릭스에 대한 강력한 내장 라이브러리 기능R에서는 다음과 같이 동일하게 달성됩니다.

Matlab에서 이것은 다음과 같이 달성됩니다.

Re: 행렬의 공통 요소 및 비공통 요소에 대한 함수@gzmorgan0 ,
감사합니다. 또한 이전 대화에 대한 업데이트입니다. 행 벡터인지 열 벡터인지에 따라 행렬의 행 수가 다르거나 열 수가 다른 경우 권장하는 접근 방식이 작동하지 않을 것이라고 생각합니다.
Re: 행렬의 공통 요소 및 비공통 요소에 대한 함수JSL C ompanion, JMP 스크립팅 언어의 응용 프로그램, 제2판.
Re: 행렬의 공통 요소 및 비공통 요소에 대한 함수@gzmorgan0 ,
JSLC는 무엇을 의미합니까?
Re: 행렬의 공통 요소 및 비공통 요소에 대한 함수원래 게시물에 " 두 개 이상의 행렬 사이에서 공통 요소와 비공통 요소를 결정할 수 있는 내장 함수를 알지 못합니다. "
각 요소 행렬에서 값과 위치로 구성됩니다. 따라서 나는 위치() common amd uncommon을 찾는 함수 강요 .커먼 및 언커먼을 요청했다면 게시물이 더 정확했을 것입니다. 값 .
관심이 있는 경우 색인을 사용하여 일치하는 행렬과 일치하지 않는 행렬뿐만 아니라 공통 및 비공통 값을 얻을 수 있습니다.
A= [2,3,4,7,8,9];
B= [2,4,5,6,7,9];
m_idx = loc(A==B);
u_idx = loc(A!=B);
m_mat = A[m_idx];
u_matA = A[u_idx];
u_matB = B[u_idx];
show(m_mat, u_matA, u_matB);
//or you can give a match or empty or unmatched and empty
x = J(5,4,RandomInteger(1,4));
y = J(5,4,RandomInteger(1,4));
e_mat = J(5,4,empty());
m_idx2 = loc(x==y);
u_idx2 = loc(x!=y);
matched_mat = e_mat;
matched_mat[m_idx2] = x[m_idx2];
unmatched_x = e_mat;
unmatched_y = e_mat;
unmatched_x[u_idx2] = x[u_idx2];
unmatched_y[u_idx2] = y[u_idx2];
show(x, y, matched_mat,unmatched_x,unmatched_y);
그러나 행렬은 숫자입니다.JSLC v2의 경우 JMP 13에 제한이 있는 몇 가지 기능을 제공했습니다. 가장 자주 사용하는 두 가지는 (1) L콤바인() 개체 또는 행렬 목록의 합집합 또는 교집합을 찾습니다. 목록에는 문자열, 표현식 등이 포함될 수 있습니다. (2) L펑크() 이를 통해 사용자는 목록의 각 요소에 적용되는 함수를 정의할 수 있습니다(예: Contains()). 따라서 사용자는 for 루프를 스크립팅할 필요가 없습니다.
Re: 행렬의 공통 요소 및 비공통 요소에 대한 함수@gzmorgan0 ,
당신의 응답을 주셔서 감사합니다. 나는 당신의 조언을 시도했고 여기에 내 테이크가 있습니다.
Clear Log(); Clear Globals();
A = Random Index(10,6);
Show(A);
B = Random Index(10,6);
Show(B);
show(loc(A==B));
show(loc(A!=B));
실행 결과:

공통 요소는 2,4,7 및 9 입니다. 그러나 위의 경우 각 위치에서 요소가 동일한 위치만 반환합니다.
흔하지 않은 요소는 위치 2,3,4 및 5에 있으며, 이는 다시 두 행렬 사이의 흔하지 않은 요소가 아니라 요소가 동일하지 않은 위치입니다.
Re: 행렬의 공통 요소 및 비공통 요소에 대한 함수당신은 조사해야 위치() 행렬에 대한 기능. "공통"이 아닌 값을 찾으려면 loc( A != B ) 또는 loc( Abs(AB) >0 )을 사용하십시오.
또한 찾아 데이터 테이블 비교
A = Random Index(10,6);
Show(A);
B = Random Index(10,6);
Show(B);
show(loc(A==B));
//Repeat 10 times
For (i=1, i<=10, i++,
X = J(5,3,RandomInteger(1,10));
Y = J(5,3,RandomInteger(1,10));
show(X, Y, Loc( X-Y ==0), Loc(X==Y));
);
//Note be careful if the values are "floating" numbers 5 might be stored as 5.000000001 or 4.999999999
//you might want to use Loc( Abs(X-Y) < 1e-32) some "fuzz factor"