Soft Question : 그림에서 파이썬은 어디에 적합합니까?


9

그래서 저는 파이썬 학습을 귀찮게해야하는지에 대해 토론했습니다. 교수님과의 대화에서 Matlab은 학계 에 관한 한 응용 수학 / 계산 과학에 사용되는 공통 언어 인 것 같습니다 . 반면에 산업 내 교수 (특히. 업계에서 일한 사람들) 말했다 학습 C ++는 가장 안전한 길이다.

나는 파이썬을 귀찮게 해야하는지 또는 당분간 내가 아는 것 (MATLAB 및 C ++)을 정말로 잘 해야하는지에 대해 학계와 산업계 모두의 의견을 듣고 싶습니다.

업데이트 : Geoff는 좋은 점을 제시합니다. 아마도 자세한 내용을 설명해야합니다.

저는 현재 작년에 계산을 전문으로 수학을 공부하는 저학년입니다. 나는 대학원을 추구하고 연구를 계속하고 (나 자신이 가르치는 것을 본 적이 없다) 실험실에서 일하고 싶다. 둘 다 이상적입니다. 어떤 분야의 연구에 관해서는 아마도 수치 분석 또는 확률의 선을 따르는 것입니다. 계획 A가 효과가없는 경우, 산업에 대한 준비가 학교에서 너무 많은 시간을 허비하지 않는 한, 업계에서 일할 수있는 기회가 있습니다. 그래서, 나는 업계에서 일반적으로 사용되는 언어를 백업으로 배워야한다고 생각했습니다. 그러나 이것이 또한 내가 갈등하는 이유입니다. 너무 많은 시간이 걸리기 때문에 모든 언어를 공부하거나 모든 가능성에 대비할 수는 없습니다.


1
귀하의 질문은 좋은 것이지만 아마도 너무 개방적이고 모호합니다. 어떤 징계를 공부하고 있으며, 무엇을하고 싶을 것이라고 생각하십니까?
Geoff Oxberry

1
: ++ MATLAB 또는 순수 C에서 잘 작동하지 않을 것입니다 그 파이썬 함께 할 수있는 것들의 예를 들어 epubs.siam.org/doi/abs/10.1137/110856976 . (
Shameless

답변:


15

이러한 유형의 질문 중 하나는 어려움이 커뮤니티에 따라 다르다는 것입니다.

우연한 순서로 일부 질문에 대답하려면 :

MATLAB은 학계와 산업에서 많이 사용됩니다. 업계에서 꽤 많이 사용되는 이유 중 하나는 학계에서 가르치기 때문입니다. MATLAB이 Lincoln Laboratory 및 DuPont의 연구 개발 부서에서 사용된다는 사실을 알고 있습니다.

sympy 및 SAGE와 같은 기호 계산에 적합한 Python으로 작성된 소프트웨어 패키지가 있습니다. 특정 관심사, 기능 요구 사항 및 개인 취향에 따라 Mathematica (또는 Maple 또는 기타 컴퓨터 대수 시스템)가 이러한 패키지보다 우수 할 수 있습니다.

MATLAB에는 일부 기호 계산에 사용할 수있는 Symbolic Math Toolbox가 있지만 필자의 경험상 Mathematica 및 Python보다 기호 조작 기능이 약합니다. C ++에서는 이론적으로 일부 기호 조작을 수행 할 수 있지만 다루기가 어렵습니다. MATLAB도 좋은 범용 언어가 아닙니다. 선형 대수와 수치 수학을 잘 수행하지만 입출력 기능이 우수하지 않습니다. C ++ 또는 Python과 비교할 때 병렬 병렬 기능 (병렬 MATLAB, MATLAB Star-P 및 Parallel Computing Toolbox와 같은 변형이 있더라도)이 없습니다. 그래픽 기능조차 일부 작업을 사용할 수 있습니다. MATLAB은 라이센스가있는 기관과 제휴하지 않는 한 비쌉니다. 각 도구 상자는 구입 비용이 비싸며 일반적으로 수백에서 수천 달러의 비용이 듭니다.

Mathematica는 기호 계산 외에도 숫자 계산을 수행합니다. 사람들이 숫자 작업에 Python과 MATLAB을 사용하는 것처럼 사람들이 수치 계산에 사용하는 것을 보지 못했습니다. 병렬 기능도 있지만 대형 슈퍼 컴퓨터에는 확장되지 않습니다.

파이썬은 배우기 쉽고 사용하기 쉬운 것으로 간주되는 범용 언어입니다. 대형 슈퍼 컴퓨터 (예 : PyClaw, petsc4py, mpi4py 등)에서 사용되며 잘 확장됩니다. 또한 숫자 패키지 (예 : NumPy 및 SciPy)도 높이 평가했습니다. 크고 활동적인 공동체; 좋은 입출력 처리 능력; 큰 라이브러리 저장소와 함께 좋은 그래픽 라이브러리 (PyPI를 확인하십시오). 위에서 언급 한 독점 패키지에 비해 무료입니다. MATLAB 또는 Mathematica의 대부분의 기능은 무료로 제공되는 Python 패키지에서 찾을 수 있습니다. Python의 주요 단점은 C ++과 같은 컴파일 된 언어보다 속도가 느리다는 점입니다. Cython, Numba 및 PyPy의 지속적인 개발로 인해 이러한 단점이 줄어들고 있습니다. 또한 느린 Python 코드를 C (또는 C ++ 또는 Fortran) 코드 및 적절하게 작성된 Python 래퍼로 대체하여 완화 할 수 있습니다. 해석하면 많은 사람들이 컴파일 된 언어보다 파이썬으로 더 높은 생산성을보고합니다. 꽤 인기가 있으며 시간이 있으면 배우는 것이 좋습니다.

C ++은 복잡한 언어이며 계산 과학에서 사용하는 것은 논란의 여지가 있습니다. 큰 기능 세트를 사용하면 유지 관리가 어렵고 컴파일하는 데 영원히 걸리는 소프트웨어를 쉽게 작성할 수 있습니다. 그러나 신중하게 사용하면 deal.II, Blaze 및 Elemental과 같은 프로젝트에서와 같이 템플릿 및 연산자 오버로드와 같은 기능을 큰 효과로 사용할 수 있습니다. C ++은 고급 기능과 관련하여 가파른 학습 곡선을 가지고 있으며, 사람들이 전체 언어를 배우는 것처럼 느끼기 위해 수년이 걸리는 일화 보고서를 들었습니다. 그럼에도 불구하고 사용성 문제와 복잡한 기능 세트에도 불구하고 인기있는 언어입니다. 자신을 더 잘 활용하기 위해서는 배우는 것이 좋습니다. 전산 과학의 주요 경쟁자는 Fortran과 C이며 학습 가치가 있습니다.

배우기로 결정한 것은 실제로 필요한 것에 따라 결정됩니다. 물론 파이썬과 C ++를 모두 배우는 것이 좋지만 시간과 리소스 제약이 있다면 실제로 사용해야 할 내용 만 배우게 될 것입니다. 이는 작업하는 커뮤니티에 따라 다릅니다.


학계에 관한 한 C ++ 대신 Python을 배우는 데 시간을 투자하는 것이 더 낫다고 말합니까?
AlanH

1
다시 말하지만, 모든 것이 달려 있습니다. 나는 여전히 학문적 인 측면에 있으며 파이썬을 항상 사용합니다. 또한 해당 언어로 작성된 작업에는 여전히 C ++을 사용해야합니다. 내 개인적인 의견은 파이썬을 먼저 배우는 것이 C ++을 먼저 배운 것보다 더 빨리 돈을 지불 할 것이지만 사람들이 사용하는 영아 / 확률 적 프로세스 / 조합을 모르므로 마일리지가 다를 수 있습니다.
Geoff Oxberry

나는 파이썬을 먼저 배우는 것이 좋은 아이디어라고 Geoff에 동의 할 것이다. C ++은 좋은 언어이지만 학습 곡선이 상당히 높으며 반쯤 배우는 것은 전혀 배우지 않는 것보다 더 나쁩니다.
LKlevin

"C ++은 고급 기능과 관련하여 가파른 학습 곡선을 가지고 있으며, 사람들이 전체 언어를 배운 것처럼 느끼는 데 몇 년이 걸린다는 일화적인 보고서를 들었습니다." 예, 더 동의 할 수 없었습니다. 소금에 걸 맞는 프로그래머라면 자신의 인생에서 언젠가는 c / c ++를 배워야한다고 생각하지만 실제로는 전문가와 같은 느낌이 들려면 10000 시간이 걸릴 것입니다. +1
제임스

11

Misha와 Geoff Oxberry가 지적했듯이 Mathematica는 실제로 다른 초점을 가지고 있습니다 (스크류 드라이버로 못을 박을 수 있다고해서 꼭해야한다고 의미하지는 않습니다). "나는 Matlab을 알고 있다면 왜 파이썬을 배워야합니까?" [편집 : 그리고 분명히, 당신을 했어.]

모든 의도와 목적을 위해 Matlab은 과학 컴퓨팅의 영어입니다.이 비유에는 모든 긍정적 및 부정적 의미가 있습니다. 한 가지 좋은 점은 Matlab 코드가 다른 언어의 코드보다 많은 사람들에게 유용 할 수 있다는 것입니다 (즉, 실행 가능하고 이해할 수 있음). (이것이 내가 모든 알고리즘에 Matlab 코드를 제공하는 주된 이유입니다.) 또한 Matlab 데스크탑은 프로토 타이핑하는 동안 특히 유용합니다. 특히 편집기에서 직접 코드 비트 (셀)를 실행하는 기능은 물론 프로파일 러에서.

즉, 재미와 이익을 위해 다른 고급 언어를 배우고 싶다면 Python보다 더 나쁠 수 있습니다. Geoff가 열거 한 것 외에 몇 가지 이유 :

  • 파이썬에서 외부 프로그램 및 라이브러리와 인터페이스하는 것이 훨씬 쉽습니다. 더 이상 멕시코 파일이 없습니다!

  • 데스크탑에서 떨어져 있다면 Matlab 라이센스에 액세스하는 것보다 Python + NumPy / SciPy를 시작하고 실행하는 것이 훨씬 쉽습니다.

  • Matlab이 NumPy보다 빠른 주된 이유는 선형 대수 (MKL, ACML)를 위해 최적화 된 공급 업체 라이브러리를 번들로 제공하기 때문입니다. ( 대략 지루한 경우 ) 선형 대수를위한 Matlab과 거의 동일한 성능 (및 멀티 스레딩)을 얻기 위해 자신의 NumPy를 빌드하고 동일한 라이브러리에 연결하는 것이 가능하며 다른 모든 것에 대한 Python의 성능이 향상됩니다. (물론 학문적 용도로도 라이센스가 필요하지만 무료 소프트웨어 보너스를 무시하더라도 사무실 에서뿐만 아니라 오프라인에서 고용주가 후원하는 빠른 설치에서 동일한 코드를 사용하는 것이 여전히 흥미로운 옵션입니다 가정용 컴퓨터 나 노트북에 설치하십시오.)

  • Matlab의 툴박스가 판매 포인트 중 하나이지만, Python이 앞서가는 영역이 몇 가지 있습니다. 특히 SymPyFEniCS 는 Symbolic 및 PDE 도구 상자를 크게 능가합니다.

  • 재미있는 부분 (시맨틱 공백과 이름 바인딩 에도 불구하고)을 잊지 마십시오 . 여러 동료가 Python 버그에 물린 것을 보았고 Matlab에없는 Python에서 알고리즘을 작성하는 데 실제로 만족스러운 것이 있습니다 ( 그것은 외국어를 배우는 기쁨 일 수도 있지만) :)

NumPy로 시작하면 이 페이지가 도움 될 수 있습니다.


5

파이썬은 c ++와 Matlab을 대신 할 수 있습니다. 그것은 학계와 산업 모두에 잘 퍼져 있습니다. 산업에서는 종종 저수준 언어, 주로 c / c ++의 접착제로 사용됩니다. Mathematica는 완전히 다른 이야기입니다. 주요 장점은 언급 된 다른 모든 (c / c ++; Matlab; Python)이 좋지 않은 경우입니다. 심볼 계산에서.

c ++는 오래되고 안정적이며 상대적으로 저수준 프로그래밍 언어입니다. 파이썬은 새롭고 진화하는 고급 컴퓨터 언어입니다. Matlab은 벡터 대수에 강한 악센트가있는 수치 계산 환경입니다 (물론 거의 모든 것을 할 수는 있지만). Mathematica는 기호 계산 (matlab과 동일한 설명)에 강한 악센트가있는 컴퓨터 대수 시스템입니다. 따라서 그들은 경쟁자가 아닙니다.


과연; 사람들이 과학 계산을 위해 Mathematica를 사용하는 것을 볼 때 나는 종종 당황합니다.
Christian Clason

@ChristianClason과 Misha : Mathematica는 주로 컴퓨터 대수 시스템이라는 오해입니다. 사람들이 실제로 그것을 어떻게 사용하는지 살펴보면 대부분이 상징적 대수학 이 아니며 여러 숫자 필드에서 MATLAB 및 R과 같은 도구와 경쟁 합니다. 수치 통합이나 시각화와 같은 일부 영역에서는 MATLAB보다 앞서있는 것 같습니다. PDE 해결과 같은 다른 사람들에게는 뒤쳐져 있습니다.
Szabolcs

숫자 컴퓨팅에만 관심이있는 사람에게 파이썬은 MATLAB의 대안으로 선형 대수, 푸리에 변환, 특수 함수 등을 포함한 표준화 된 계산을 처리하기 위해 라이브러리 루틴을 사용하는 능력과 비슷한 비교적 높은 수준의 언어입니다. 예, Python은 훨씬 더 광범위하게 적용 할 수 있지만 MATLAB에서 수행 할 수있는 모든 것을 다룹니다.
Brian Borchers

4

귀하의 질문은 파이썬 사용에 관한 것이지만 "수치 분석 또는 확률"에 관심이 있다고 말했습니다. R 을 고려했는지는 모르겠지만 이러한 종류의 작업을 위해 특별히 설계되었습니다. R은 확률과 통계를위한 매우 강력한 언어이며, 수학자 및 과학자들의 매우 크고 활발한 사용자 기반을 가지고 있습니다.

R은 오픈 소스이고 통계에 중점을두고 있으며 매우 인상적인 플롯을 제공한다는 점에서 Matlab과 다릅니다 ( ggplot2 참조 ). Matlab에서 할 수있는 거의 모든 것을 R에서 할 수 있지만, 내가 가장 좋아하는 부분은 사용자 기여입니다. 기고 된 라이브러리의 대부분은 과학자가 작성하고 통계 저널에 게시됩니다. 또한 매우 잘 작성된 안내서 (참조 및 비 네트)가 있습니다. 내가 가장 좋아하는 라이브러리는 CULA 라이브러리를 기반으로하는 CUDA 지원을 제공합니다 (학업 용 무료). 확률 이론에 대한 방대한 방법이 있습니다 ( 여기 참조 ).

어쨌든 R은 확실히 작업 라인을 위해 특별히 설계되었으므로 체크 아웃하여 툴킷에 추가하는 것을 고려하십시오.

행운을 빌어 요!


2

다른 사람들은 이미 여기서 시도 할 것보다 더 길고 깊이있는 의견을 제시했습니다. 그러나 한 가지 점을 한 번 더 강조하고 싶습니다. 지역에 따라 다릅니다. 예를 들어, 전기 공학 프로젝트를 수행하는 경우 matlab을 사용하게 될 가능성이 있습니다. 간단한 모형 문제에 대한 수렴 률 추정치를 확인하려는 수치 분석가 인 경우에도 마찬가지입니다.

다른 한편으로, 당신이 과학적 계산에 적절하다면 (예를 들어, 에어 포일 주위의 흐름 시뮬레이션, 플라즈마에서의 핵융합 시뮬레이션, 지구 맨틀에서의 대류 시뮬레이션) 또는 그러한 응용 프로그램을 염두에두고 수치 법을 개발한다면, 링구아 franca는 C ++입니다. 모든 대규모 과학 컴퓨팅 패키지는 오늘날 C ++ (또는 C)로 작성되어 더 좋거나 나빠질 수 있으며, 이것이 앞으로도 오랫동안 머무를 방법입니다. 단지 몇 가지 예를 들기 위해 PETSc와 엄청나게 크고 다양한 Trilinos 패키지가 각각 C와 C ++로 작성되었습니다. 내가 생각할 수있는 큰 오픈 소스 유한 요소 라이브러리 중 (libMesh, deal.II, oofem, freefem) 모든 것이 하나의 C ++로 작성되었습니다. 시각화 프로그램 중에서 가장 큰 두 가지 (방문 및 Paraview)는 C ++로 작성됩니다. 나는 목록을 확장 할 수 있었다.

요점은 소규모 시뮬레이션에 만족하는 사람들은 하나의 언어를 사용하지만, 병렬 계산이 심각 할 때마다 다른 것을 사용한다는 것입니다. PETSc와 Trilinos가 C와 C ++로 작성된 경우, 나는 (거래 저자 II) 내가 원하는 경우에도 다른 언어를 쉽게 선택할 수 없습니다. PETSc 및 Trilinos와 협력해야합니다.


1
공정하게 말하면, 포트란에서 온 많은 PETSc 사용자가 있고, 파이썬에서 온 사람도 있습니다. C는 거의 모든 언어에서 쉽게 호출 할 수 있지만 혼합 언어 프로그래밍에는 고유 한 문제가 있으므로 자주 권장하지는 않습니다. 스택에서 코드가있는 위치의 문제도 너무 자주 간과됩니다. 최종 사용자 응용 프로그램 예를 들어 시스템 수준 라이브러리와 다른 소프트웨어 디자인을 선택 해야합니다 .
제드 브라운

공정 해. 그럼에도 불구하고 오늘날 대규모 계산에 사용되는 최신 소프트웨어 인스턴스가 C와 C ++로 압도적으로 쓰여졌다는 사실은 사실입니다 (이전의 포트란에도 불구하고 구식 보류).
볼프강 Bangerth

1

2 센트를 추가하기 위해 최근 학업 경험 (신선한 박사 학위 과정)과 산업 경험 (측량 장비 제조업체)을 모두 보유했습니다.

우리는 약한 임베디드 프로세서 (휴대 전화 프로세서를 생각하십시오)에서 많은 숫자 계산을 수행합니다. ARM에 MATLAB이없는 것 외에도 C ++은이 세상에서 왕입니다. 많은 임베디드 컴파일러 제품군에는 FORTAN이 포함되어 있지 않습니다!

MATLAB 라이센스의 수가 제한되어 있지만 제품을 2 와트의 전력으로 만들어야하는 요구 사항은 C ++에 찬성하여 개발 작업에 치우칩니다 (제외 실험).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.