Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
乘0比Python中的任何其他乘法都快吗?_Python_Tensorflow_Keras - Fatal编程技术网

乘0比Python中的任何其他乘法都快吗?

乘0比Python中的任何其他乘法都快吗?,python,tensorflow,keras,Python,Tensorflow,Keras,我想在Python中优化矩阵乘法(权重回归),方法是将一些我知道在计算中不需要的值屏蔽为零。它们仍然会存在,因为我不想改变矩阵的大小。矩阵是浮点数 Python(keras/tensorflow?)会以不同的方式处理这些乘法并显著加快处理速度,还是会花费类似的时间,使这种掩蔽变得毫无意义?否,乘以零与乘以任何其他数字相同 >>> def times_zero(x): ... return x * 0 ... >>> import dis >&g

我想在Python中优化矩阵乘法(权重回归),方法是将一些我知道在计算中不需要的值屏蔽为零。它们仍然会存在,因为我不想改变矩阵的大小。矩阵是浮点数


Python(keras/tensorflow?)会以不同的方式处理这些乘法并显著加快处理速度,还是会花费类似的时间,使这种掩蔽变得毫无意义?

否,乘以零与乘以任何其他数字相同

>>> 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   
我给他们计时:

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

为什么你不给这两种方法计时并自己找出答案呢?虽然你问的问题还不清楚,但请阅读更多关于稀疏张量的内容。如果零的数量很重要,你可以使用稀疏张量。谢谢-我已经检查过了,稀疏张量正是我想要的解决方案。未来对它感兴趣的人的捷径:这里没有什么令人惊讶的。您进行了一次计时,您的CPU可能正忙于做其他事情。请尝试更经验性的方法,例如
timeit.Timer.repeat
,对于
repeat
number
@DeepSpace,请使用非常大的数字。还没有真正涉及到这类事情的时间安排。我要调查一下。