Я читал несколько статей / постов, касающихся numpy
, и мне было интересно, как на самом деле работает векторизация в numpy
.В некоторых статьях упоминается использование циклов Си, в то время как в других говорится о вещах, более близких к аппаратному обеспечению, таких как наборы векторных инструкций.Например, если у меня есть следующий код:
a = np.array([1,2,3])
b = np.array([2,4,6])
M = np.array([[1,2,3],[4,5,6],[7,8,9]])
и я вызываю следующие функции:
c = np.dot(a,b)
M2 = M@M
test_condition = np.where(a > 2, a + 999, a)
Тогда я предполагал, что вызовы векторизованных функций в приведенных выше примерах были простопричудливый способ сказать, что numpy
вызывает быстрый скомпилированный цикл C for для обработки каждого элемента.Это так, или что-то гораздо более сложное, что на самом деле происходит под капотом?