줄리아 많은 유용한 수치 분석 도구가 내장된 고성능 프로그래밍 언어입니다. 작성하기 쉽고 과학 컴퓨팅, 기계 학습 등을 위한 유용한 패키지 생태계가 빠르게 성장하고 있습니다. Julia는 JMP와 마찬가지로 과학자, 연구원 및 엔지니어에게 귀중한 도구입니다.
Julia는 다른 프로그래밍 언어와의 쉬운 상호 운용성으로 유명하고 JSL에서 Julia를 호출하는 것이 얼마나 어려울지 궁금했습니다. 할 수 있다면(할 수 있다!), JSL에서 Julia를 호출하는 데 많은 가능성이 있습니다. 고성능 Julia 프로그램을 호출하는 대화형 JMP 사용자 인터페이스를 구축할 수 있습니다. Julia에서 모델을 빌드하고 JMP에서 결과를 플롯하거나 그 반대의 경우도 마찬가지입니다. JMP 워크플로의 느린 부분을 Julia에서 수행할 수 있습니다.
JSL에서 Julia를 호출하는 두 가지 방법에 대해 설명하겠습니다. 첫 번째 방법은 JSL을 사용하여 Python을 호출하여 Julia를 호출하는 것입니다. 두 번째 방법에서는 C로 작성된 DLL(동적 연결 라이브러리)에 Julia를 포함합니다.
Julia 프로그래밍에 대해서는 많이 다루지 않을 것입니다. Julia에 대해 더 알고 싶다면 그들의 선적 서류 비치 . 에서 제공하는 학습 자료도 있습니다. 줄리아 아카데미 .
Python을 통해 Julia 호출하기
JSL의 파이썬
JMP 14에는 Python과 직접 인터페이스하기 위한 JSL 명령이 추가되었습니다. 다음은 스크립팅 인덱스의 간단한 예입니다.
// Initialize the Python interface
PythonInit();
// Submit some Python code to run as a JSL string
PythonSubmit("\[message = 'The quick brown fox jumps over the lazy dog']\");
// message is now a variable in Python and can be accessed from JSL with PythonGet()
getStr = PythonGet(message);
Show(getStr);
// Terminate the Python interface
PythonTerm();
파이줄리아
Python에서 Julia를 호출할 수 있다면 JSL에서 Julia를 호출할 수 있습니다. 파이줄리아 는 그렇게 할 수 있는 Python 패키지입니다. 설정해 봅시다. 참고: 저는 Mac에서 Julia 1.5.4, Python 3.9.5, PyJulia 0.5.7 및 JMP 16.1을 성공적으로 사용했습니다.
Python 설치가 작동한다고 가정하면 설정은 다음과 같습니다.
아직 설치하지 않았다면 Julia를 설치하십시오. 지침을 보려면 다음을 방문하십시오. 공식 바이너리용 플랫폼별 지침 . 최신 버전의 다운로드는 다음에서 사용할 수 있습니다. 줄리아 다운로드 페이지 .
다음으로 지침 PyJulia를 설치합니다.
PyJulia를 사용할 수 있다면 사용 지침 정규 Python 세션에서, 당신은 갈 수 있습니다!
JSL의 PyJulia
이제 JSL에서 먼저 Python 세션에서 Julia를 초기화해야 합니다. 아래와 같이 런타임 키워드 인수로 Julia 실행 파일의 경로를 전달해야 합니다.
Python Init();
// Initialize julia
Python Submit(
"\[
from julia import Julia
Julia(runtime="/usr/local/bin/julia")
]\");
여기에서 다음을 사용할 수 있습니다. 파이썬 제출 Julia 코드를 실행합니다.
// Import the main module. This is Julia's workspace.
Python Submit("\[
from julia import Main
Main.xs = [1,2,3] # xs belongs to julia
sines = Main.eval("sin.(xs)") # This returns the sine of each element in xs
]\");
show(PythonGet(sines)); // [0.841470984807897 0.909297426825682 0.141120008059867]
다른 Julia 패키지가 설치되어 있는 경우 Python 가져오기를 통해 액세스할 수 있습니다. 여기서는 Pandas.jl, DataFrames.jl 및 Lasso.jl을 사용하여 Big Class.jmp에서 높이에 맞는 올가미를 실행했습니다. 그런 다음 나는 사용 JMP 그래프 빌더로 실제 대 예측을 플로팅합니다.
// Convert datatable to julia dataframe
// Must convert it to a julia Pandas dataframe first
dt = open("$SAMPLE_DATA/Big Class.jmp");
Pythonsend(dt);
Python Submit(
"\[
from julia import Pandas
from julia import DataFrames
from julia import Lasso
Main.dt = dt
predicted = Main.eval("""
using Lasso
df = DataFrames.DataFrame(Pandas.DataFrame(dt))
m = fit(LassoModel, @formula(height ~ sex + weight), df)
predict(m, df)
""")
]\");
// Back to JMP where we plot Actual vs. Predicted
predicted = pythonget("predicted");
dt << newColumn("Predicted height", <<SETVALUES></SETVALUES>
Julia에서 계산된 결과가 포함된 실제 vs. 예측 그래프 빌더 플롯

DLL에 Julia 포함
그것은 또한 가능하다 줄리아를 끼워넣다 C 코드에서. 나는 몇 가지 사소한 예를 공유할 것이지만 C에 더 익숙한 누군가가 이것을 더 이해할 수 있을 것이라고 확신합니다.
로드DLL
여기서 핵심은 JSL의 로드DLL 기능. 사용법을 배울 수 있는 좋은 자료 로드DLL ~이다 이 종이 . 간단한 예로 test.c라는 파일에서 다음 C 함수를 사용할 수 있습니다.
// test.c
double myMultiply(double num1, double num2)
{
return num1 * num2;
}
그리고 DLL로 컴파일
# On Mac
gcc -shared -o test.dylib test.c
# On Windows
gcc -shared -o test.dll test.c
그런 다음 JMP에서 C 함수를 호출할 수 있습니다.
dll = loadDLL(convertfilepath("/path/to/my/test.dylib"));
dll << declareFunction("myMultiply",
Convention( STDCALL ),
Arg(Double, "num1"),
Arg(Double, "num2"),
Returns( Double )
);
show(dll << myMultiply(Pi(), 100));
dll << unloadDLL;
줄리아 DLL
이제 Julia가 포함된 DLL을 살펴보겠습니다. 입력이 도 단위인 입력의 사인을 계산하는 함수를 만들 것입니다.
// call_julia.c
#include <julia.h>
double sineInDegrees(double degrees)
{
// required: setup the Julia context
jl_init();
// You can evaluate Julia code from strings
jl_value_t *factor = jl_eval_string("pi/180");
double factor_unboxed = jl_unbox_float64(factor);
double radians = degrees * factor_unboxed;
// You can call Julia functions directly
jl_function_t *func = jl_get_function(jl_base_module, "sin");
jl_value_t *argument = jl_box_float64(radians);
jl_value_t *ret = jl_call1(func, argument);
double ret_unboxed = jl_unbox_float64(ret);
jl_atexit_hook(0);
return ret_unboxed;
}
아래를 실행하여 Mac에서 컴파일합니다. 여기서 $JULIA_DIR julia 바이너리 경로가 있는 환경 변수입니다. 저에게 이것은 /Applications/Julia-1.7.app/Contents/Resources/julia입니다. Windows에서는 이것을 시도하지 않았지만 비슷한 것이 작동해야 합니다.
# On Mac
gcc -shared -o call_julia.dylib call_julia.c -fPIC -I$JULIA_DIR/include/julia -L$JULIA_DIR/lib -Wl,-rpath,$JULIA_DIR/lib -ljulia
이제 전화를 걸 수 있습니다. 사인도 JSL에서!
dll = loadDLL(convertfilepath("/path/to/my/call_julia.dylib"));
dll << declareFunction("sineInDegrees",
Convention( STDCALL ),
Arg( Double, "degrees" ),
Returns( Double )
);
show(dll << sineInDegrees(90)); // 1
dll << unloadDLL;
결론
JSL의 파이썬과 로드DLL 인터페이스를 통해 JMP를 넘어 Julia에게 전화할 수 있습니다. 이 작업을 수행하는 데 약간의 시행착오가 필요했지만 일단 설정되면 꽤 잘 작동합니다. 이 게시물에서 몇 가지 간단한 예를 보여 주었지만 JMP와 Julia를 결합하여 새롭고 흥미로운 응용 프로그램을 구축할 수 있는 가능성을 봅니다.
읽어 주셔서 감사합니다. 정보를 제공하고 탐색할 수 있기를 바랍니다.
버전에 대한 참고 사항
나는 Julia가 Julia 1.5와 Mac의 Julia 1.8 베타를 사용하여 Python을 통해 작업하도록 할 수 있었습니다. Windows에서 Python을 통해 Julia를 사용하는 데 성공하지 못했지만 Mac에서만큼 많은 버전을 시도하지는 않았습니다. 모든 테스트에 JMP 16을 사용했습니다.