Ответы пользователя по тегу NumPy
  • Python. Как написать функцию для заполнения матрицы по условию?

    @nirvimel
    Первое правило numpy - НИКАКИХ ЦИКЛОВ!
    from time import time
    import numpy
    from numpy.lib.stride_tricks import as_strided
    
    def fill_matrix_python(width, height):
        i, j = numpy.mgrid[0:height, 0:width]
        return 22. / (i + j + 2)
    
    def fill_matrix_native(width, height):
        array = numpy.arange(2, width + height + 2)
        stride = array.strides[0]
        view_2d = as_strided(array,
                             shape=(width, height),
                             strides=(stride, stride))
        return 22. / view_2d
    
    start_time = time()
    fill_matrix_python(10000, 10000)
    print('Python implementation: Matrix 10000x10000 filled in %.3f seconds' % (time() - start_time))
    
    start_time = time()
    fill_matrix_native(10000, 10000)
    print('Native implementation: Matrix 10000x10000 filled in %.3f seconds' % (time() - start_time))


    Python implementation: Matrix 10000x10000 filled in 3.332 seconds
    Native implementation: Matrix 10000x10000 filled in 0.532 seconds

    Более красивое решение через mgrid под капотом реализовано все-таки через циклы на скрипте (благодарю SkiBY за замечание).
    Менее красивое решение через манипуляцию со страйдами реализовано полностью нативно.
    Ответ написан
    2 комментария
  • На чем писать back-end, в котором много математики?

    @nirvimel
    Python для вычислений медленный!? Вы просто не умеете его готовить!
    Я уже писал тут, что питон только сверху динамически типизированный скрипт (что необходимо для скорости разработки), но векторные вычисления numpy выполняются на самом железе, то есть так, что вы не напишите это на C/C++ быстрее чем на несколько процентов.
    Кроме того, для тех случаев, когда векторных вычислений не хватает, существует Cython, это такой же компилируемый (и не уступающий в производительности) как C/C++ язык, с прямым доступом к питоновым объектом, передаваемым из скрипта.

    статистика, fft, свертки, обработка звука и изображений, возможно немного распознавания

    Все это реализуется через векторные вычисления или через соответствующие библиотеки, которые тоже не на скрипте написаны и которые не уступят в производительности идеальному решению более чем на несколько процентов. Если даже для какой-то отдельной задачи не найдется готового решения в виде библиотеки, то всегда остается вариант сделать эту мелочь на Cython.
    Ответ написан
    6 комментариев