Синтаксис Numpy для линейного уравнения
Я новичок в numpy, но не в python. У вас есть вопрос о numpy способе сделать это, рассмотрим:
Edit : исправление функции* *
def _my_function(weights, features, bias):
# the pure python way
value = 0.
for i in range(len(weights)):
value += (weights[i]*features[i])
return value+bias
Как это сделать с помощью numpy?
2 ответа:
Если
weigthsиfeaturesявляются массивами numpy одинакового размера, можно выполнить элементарное умножение:values = np.sum(weights * features + bias)Если вы хотите избежать добавления смещения к каждому элементу массива product, вы можете сделать
values = np.sum(weights * features) + bias * weights.sizeВы даже можете использовать встроенную функцию Python
sum:values = sum(weights * features + bias)Или
values = sum(weights * features) + bias * weights.sizeПричина, по которой это работает, заключается в том, что выражения
weights * featuresиweights * features + biasявляются временными массивами numpy, которые итеративны вдоль их первого измерения и поэтому могут быть переданы вsum.Время
Я провел следующие временные тесты в IPython:
%timeit weights.dot(features) The slowest run took 145.86 times longer than the fastest. This could mean that an intermediate result is being cached. 1000000 loops, best of 3: 649 ns per loop %timeit np.sum(weights * features) The slowest run took 17.09 times longer than the fastest. This could mean that an intermediate result is being cached. 100000 loops, best of 3: 2.83 µs per loopИспользование
ndarray.dotпроисходит на порядок быстрее, чем использованиеnp.sumна продукте. Однако предупреждение указывает, что это может быть не так при первом запуске кода. 0.649 МКСМ * 145.86 = 94.66 МКС, а МКС 2.83 * 17.09 = 48.36 МКС.