Pergunta

são partes de NumPy e / ou SciPy programado em C / C ++?

E como é que a sobrecarga de chamar C do Python comparar com a sobrecarga de chamar C de Java e / ou C #?

Eu só estou querendo saber se Python é uma opção melhor do que Java ou C # para aplicações científicas.

Se eu olhar para o tiroteios , Python perde por uma margem enorme. Mas eu acho que isso é porque eles não usam bibliotecas de 3rd-party naqueles pontos de referência.

Foi útil?

Solução

  1. eu iria questionar qualquer referência que não mostra a fonte para cada implementação (ou eu perdi alguma coisa)? É inteiramente possível que uma ou ambas as soluções são codificados mal o que resultaria em uma avaliação desleal de um ou de desempenho tanto da linguagem. [Edit] Opa, agora vejo a fonte. Como outros apontaram, porém, ele não está usando as bibliotecas NumPy / SciPy para que esses benchmarks não vão ajudá-lo a tomar uma decisão.
  2. Eu acredito que a grande maioria dos NumPy e SciPy é escrito em C e envolto em Python para facilidade de uso.
  3. Provavelmente depende do que você está fazendo em qualquer dessas línguas como a quantidade de sobrecarga existe para uma determinada aplicação.

Eu usei Python para processamento de dados e análise para um par de anos agora, então eu diria que certamente está apto para o efeito.

O que você está tentando alcançar, no final do dia? Se você quiser uma maneira rápida de desenvolver código legível, Python é uma excelente opção e certamente rápido o suficiente para uma primeira facada em tudo o que você está tentando resolver.

Por que não ter uma festança em cada um para um pequeno subconjunto de seu problema e referência os resultados em termos de tempo de desenvolvimento e tempo de execução? Então você pode fazer uma decisão objetiva com base em alguns dados relevantes ... ou pelo menos é o que eu faria: -)

Outras dicas

Um lote de que é escrito em C ou Fortran. Você pode re-escrever os laços quentes em C (ou usar uma das maneiras zilhão para python acelerar, boost / tecelagem é o meu favorito), mas isso realmente importa?

Seu aplicativo científica será executado uma vez. O resto é apenas a depuração e desenvolvimento, e aqueles podem ser muito mais rápido em Python.

A maioria dos NumPy está em C, mas uma grande parte do código C é "clichê" para lidar com todos os detalhes sujos da interface Python / C. Eu penso que a relação C vs. Python é de cerca de 50/50 ATM para NumPy.

Eu não sou muito familiarizado com detalhes de baixo nível baseada vm, mas acredito que o custo de interface seria maior por causa das restrições colocar na JVM eo .clr. Uma das razões por que numpy é muitas vezes mais rápido do que ambientes semelhantes é a representação de memória e como matrizes são compartilhados / passados ??entre funções. Enquanto a maioria dos ambientes (Matlab e R assim eu acredito) o uso Copy-on-write para passar matrizes entre as funções, Numpy usar referências. Mas fazê-lo de exemplo a JVM seria difícil (devido a restrições sobre como usar o ponteiro, etc ...). É factível (uma porta de início de NumPy para Jython existe), mas eu não sei como eles resolvem este problema. Talvez C ++ / CLI faria isso mais fácil, mas eu tenho zero de experiência com esse ambiente.

Há uma melhor comparação aqui (não um ponto de referência, mas mostra formas de acelerar Python). NumPy é principalmente escrito em C. A principal vantagem do Python é que há uma série de maneiras de muito facilmente estender seu código com C (ctypes, gole, f2py) / C ++ (boost.python, tecer .inline, weave.blitz) / Fortran (f2py) - ou mesmo apenas por adição de anotações de tipo para Python para que ele possa ser processado para C (Cython). Eu não acho que há muitas coisas comparavelmente fácil para C # ou Java - pelo menos é assim que seemlessly lidar passando matrizes numéricas de diferentes tipos (embora eu acho que os defensores argumentam, uma vez que não têm a pena de Python desempenho há menos necessidade a).

É sempre depende de sua própria capacidade de lidar com a langue, por isso a linguagem é capaz de gerar o código rápido. Fora da minha experiência, numpy é várias vezes mais lento, em seguida, boas implementações .NET. E eu espero JAVA para ser rápido similar. Seus compiladores JIT otimizar têm melhorado significativamente ao longo dos anos e produzir instruções muito eficientes.

numpy por outro lado, vem com uma sintaxe wich é mais fácil de usar para aqueles que estão em sintonia com linguagens de script. Mas se se trata de desenvolvimento de aplicações, essas vantagens, muitas vezes se voltam para os obstáculos e você vai anseiam por typesafety e empresariais IDEs. Além disso, a diferença sintática já está fechando com C #. Um número crescente de bibliotecas científicas existem para Java e . NET .Personally I tendem para C #, bacause que proporciona uma melhor sintaxe para arrays multidimensionais e alguma forma se sente mais moderno'. Mas, claro, esta é apenas a minha experiência pessoal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top