문제

NumPy 및/또는 SciPy의 일부가 C/C++로 프로그래밍되어 있나요?

그리고 Python에서 C를 호출하는 오버헤드는 Java 및/또는 C#에서 C를 호출하는 오버헤드와 어떻게 비교됩니까?

과학용 앱에 Python이 Java나 C#보다 더 나은 옵션인지 궁금합니다.

내가 보면 총격전, Python은 큰 차이로 패합니다.하지만 이는 해당 벤치마크에서 타사 라이브러리를 사용하지 않기 때문인 것 같습니다.

도움이 되었습니까?

해결책

  1. 각 구현의 소스를 표시하지 않는 벤치 마크에 의문을 제기 할 것입니다 (아니면 뭔가를 놓쳤습니까)? 해당 솔루션 중 하나 또는 둘 다가 잘못 코딩되어 언어의 성능에 대한 부당한 평가를 초래할 수 있습니다. 편집하다 죄송합니다. 이제 소스를 봅니다. 다른 사람들이 지적했듯이, 그것은 Numpy/Scipy 라이브러리를 사용하지 않기 때문에 이러한 벤치 마크는 결정을 내리는 데 도움이되지 않을 것입니다.
  2. 나는 Numpy와 Scipy의 대다수가 C로 작성되었으며 사용하기 쉽기 위해 Python으로 싸여 있다고 생각합니다.
  3. 아마도 특정 응용 프로그램의 오버 헤드가 얼마나 많은지에 대해 해당 언어에서 무엇을하고 있는지에 달려 있습니다.

나는 몇 년 동안 데이터 처리 및 분석을 위해 Python을 사용했기 때문에 목적에 확실히 적합하다고 말할 것입니다.

하루가 끝날 때 무엇을 달성하려고합니까? 읽을 수있는 코드를 빠르게 개발할 수있는 빠른 방법을 원한다면, Python은 훌륭한 옵션이며 해결하려는 모든 것을 처음 찌르기에 충분히 빠릅니다.

문제의 작은 하위 집합에 대해 각각의 배쉬가 있고 개발 시간과 실행 시간 측면에서 결과를 벤치마킹하지 않겠습니까? 그런 다음 일부 관련 데이터를 기반으로 객관적인 결정을 내릴 수 있습니다. 또는 적어도 그게 내가하는 일입니다 :-)

다른 팁

그것의 많은 부분이 C 또는 Fortran으로 작성되었습니다. C에서 핫 루프를 다시 작성하거나 (가질 리온의 속도를 높이기 위해 Gazillion 방법 중 하나를 사용하고, 부스트/직조가 내가 가장 좋아 하는가) 실제로 중요합니까?

과학 앱은 한 번 실행됩니다. 나머지는 디버깅과 개발 일 뿐이며 파이썬에서 훨씬 더 빠를 수 있습니다.

Numpy의 대부분은 C에 있지만 C 코드의 대부분은 Python/C 인터페이스의 모든 더러운 세부 사항을 처리하기위한 "Boilerplate"입니다. 비율 C 대 파이썬은 Numpy의 경우 약 50/50 ATM이라고 생각합니다.

VM 기반 저수준 세부 사항에 너무 익숙하지는 않지만 JVM과 .CLR에 제한이 제한되어 인터페이스 비용이 더 높을 것이라고 생각합니다. Numpy가 유사한 환경보다 종종 빠른 이유 중 하나는 메모리 표현과 기능간에 배열이 공유/전달되는 방법 때문입니다. 대부분의 환경 (MATLAB 및 R은 내가 생각하는 MATLAB 및 R)은 복사기 쓰기를 사용하여 기능 간의 배열을 전달하는 경우 NUMPTY 사용 참조. 그러나 예를 들어 JVM에서 그렇게하는 것은 어려울 것입니다 (포인터 등을 사용하는 방법 등에 대한 제한 때문에 ...). 그것은 가능하지만 (Jython의 초기 포트는 존재합니다), 나는 그들이이 문제를 어떻게 해결하는지 모르겠습니다. 어쩌면 C ++/CLI가이를 더 쉽게 만들 수 있지만 그 환경에 대한 경험이 전혀 없습니다.

더 나은 비교가 있습니다 여기 (벤치마크는 아니지만 Python 속도를 높이는 방법을 보여줍니다).NumPy는 대부분 C로 작성되었습니다.Python의 가장 큰 장점은 여러 가지 방법이 있다는 것입니다. 매우 C(ctypes, swig,f2py) / C++(boost.python, weave.inline, weave.blitz) / Fortran(f2py)을 사용하여 코드를 쉽게 확장하거나 Python에 유형 주석을 추가하여 C로 처리할 수도 있습니다. (사이썬).나는 C#이나 Java에서 비교적 쉬운 일이 많지 않다고 생각합니다. 적어도 다른 유형의 숫자 ​​배열 전달을 겉으로는 처리하는 것처럼 보이지 않습니다. (비록 지지자들은 Python의 성능 저하가 없기 때문에 주장할 것 같지만 필요성이 적습니다.) 에게).

그것은 항상 Langue를 처리 할 수있는 자신의 기능에 달려 있으므로 언어는 빠른 코드를 생성 할 수 있습니다. 내 경험 중에서 Numpy는 좋은 .NET 구현보다 몇 배나 느립니다. 그리고 나는 Java가 비슷하게 빠르게 될 것으로 기대합니다. 그들의 최적화 JIT 컴파일러는 수년에 걸쳐 크게 개선되었으며 매우 효율적인 지침을 생성했습니다.

반면에 Numpy에는 구문이 포함되어 있으며 언어를 스크립팅하는 데 도움이되는 구문이 더 쉽습니다. 그러나 응용 프로그램 개발과 관련하여 이러한 장점은 종종 장애물로 바뀌고 TypeSafety 및 Enterprise IDE를 갈망 할 것입니다. 또한 구문 간격은 이미 C#과 함께 닫히고 있습니다. 점점 더 많은 과학 도서관이 존재합니다 자바 그리고 .그물. 개인적으로 나는 C#을 향한 경향이 있고, Bacause는 다차원 배열에 대한 더 나은 구문을 제공하고 어떻게 든 더 '현대적'을 느낍니다. 그러나 물론 이것은 내 개인적인 경험 일뿐입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top