Умножается ли на 0 быстрее, чем любое другое умножение в Python? - PullRequest
0 голосов
/ 13 марта 2019

Я хочу оптимизировать умножение матриц (регрессию весов) в Python, маскируя некоторые значения, которые, как я знаю, не нужны в вычислениях, как нули. Они все еще будут там, поскольку я не хочу менять размер матриц. Матрицы являются поплавками.

Будет ли Python (керас / тензорный поток?) Обрабатывать эти умножения по-разному и значительно ускорять процесс, или же это займет столько же времени, что сделает такое маскирование бессмысленным?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Нет, умножение на ноль такое же, как умножение на любое другое число

>>> def times_zero(x):
...     return x * 0
... 
>>> import dis
>>> dis.dis(times_zero)
  2           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (0)
              6 BINARY_MULTIPLY     
              7 RETURN_VALUE        
>>> def times_four(x):
...     return x * 4
... 
>>> dis.dis(times_four)
  2           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (4)
              6 BINARY_MULTIPLY     
              7 RETURN_VALUE   
0 голосов
/ 13 марта 2019

Я рассчитал их:

from timeit import default_timer as timer
import itertools

my_toggle = itertools.cycle(range(2))

for x in range(20):
    current_number = my_toggle.__next__()
    start = timer()
    y = 1 * current_number
    end = timer()
    print(f"{end - start:.10f} seconds for {current_number}")

Но я не уверен, что делать с результатами:

0.0000002555 seconds for 0
0.0000002555 seconds for 1
0.0000002555 seconds for 0
0.0000002555 seconds for 1
0.0000002555 seconds for 0
0.0000000000 seconds for 1
0.0000000000 seconds for 0
0.0000002555 seconds for 1
0.0000000000 seconds for 0
0.0000000000 seconds for 1
0.0000000000 seconds for 0
0.0000002555 seconds for 1
0.0000002555 seconds for 0
0.0000000000 seconds for 1
0.0000002555 seconds for 0
0.0000000000 seconds for 1
0.0000000000 seconds for 0
0.0000002555 seconds for 1
0.0000000000 seconds for 0
0.0000000000 seconds for 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...