stackoverflow.com/q/40694380/4950339

нвещания описывает, как NumPy обрабатывает массивы различной формы во время арифметических операций.

Example 1:

from numpy import array 
a = array([1.0,2.0,3.0])
b = array([2.0,2.0,2.0]) # multiply element-by-element ()
a * b
>> array([ 2.,  4.,  6.])

Example 2 :

from numpy import array
a = array([1.0,2.0,3.0])
b = 2.0  # broadcast b to all a
a * b
>>array([ 2.,  4.,  6.])

Мы можем думать о том, что скаляр b растягивается во время арифметической операции в массив такой же формы, что и a. Numpy достаточно умен, чтобы использовать исходное скалярное значение без фактического копирования, чтобы широковещательные операции были как можно более оперативными и вычислительными (b - это скаляр, а не массив)

Маленькийбенчмаркинг сделан@Eric Duminil вдругой вопрос производительности памяти, показывает, что вещание имеет значение с точки зрения скорости и памяти

Однако я цитирую ту же статью, на которую ссылались выше:

Есть случаи, когда вещание - плохая идея, потому что оно приводит к неэффективному использованию памяти, что замедляет вычисления

Вопрос: когда вещание использует излишне большие объемы памяти и приводит к вялой производительности? Другими словами, когда мы должны использоватьгибридное вещание/ Python алгоритм зацикливания на чистом вещании подход?

 Paul Panzer15 нояб. 2017 г., 15:42
Я думаю, что очевидные кандидаты - это случаи, когда вещание создает большое промежуточное звено, которое затем каким-то образом сокращается. Например, матрично-матричное умножение.
 Divakar15 нояб. 2017 г., 15:23
Это всегда игра памяти и вычислений. Таким образом, когда использовать то, что зависит от варианта использования.
 hpaulj15 нояб. 2017 г., 18:27
Предыдущие вопросы SO показали, что зацикливание на маленьком измерении (в то время как другие большие) может быть быстрее, чем одна большая операция. С большими массивами затраты на управление памятью могут перевесить итерационные затраты.
 percusse15 нояб. 2017 г., 18:50
Главным образом, когда используются array_likes или subclassed ndarrays, в которых двоичная операция не является четко определенной, и вы не хотите, чтобы NumPy вмешивался. Вот тот, который я на самом деле пытаюсь остановить вещание, чтобы обрабатывать вещи вручную, потому что он делает неправильные вещиstackoverflow.com/q/40694380/4950339

Ответы на вопрос(0)

Ваш ответ на вопрос