Синтаксис 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 МКС.