![](/img/trans.png)
[英]PyTorch - Basic math operations on different shaped numpy arrays
[英]Count basic math operations
我想对算法的计算量做出一个猜测,在这种情况下,这意味着: 我在算法中加,减,乘和除的频率是多少?
例:
def b(a):
a = a + 3 #1
a = a * a #2
a = a * -1 #3
return a
if __name__ == "__main__":
for i in range(10):
b(1)
分析的输出应为:
1:+ -> 1次数学运算
2:* -> 1个数学运算
3:+, --> 2个数学运算
对于每个循环,因此在此程序上运行的分析器应返回40 。
Pythonic解决方案可能是创建一个类Operand,并使用特殊方法(__add __,__ radd __,__ mult __,__ rmult__等)指定具有关联的运算符+,-,*,/。 如果正确使用“ __r”方法,则只要有一个操作数,就可以以几乎任何顺序开始包含垃圾(1、2.0、3.0)。
该类将具有一个计数器,在创建时将其设置为零。 每个调用加1,但也添加每个运算符的计数器(默认= 0)。
然后,您可以编写:
a = Operand(2)
b = a+2-5
assert b.effort == 3
然后,您可以继续进行计算:
a = Operand(5)
a = a + 3 #1
a = a * a #2
a = a * -1 #3
print(a.effort)
在第一行中,创建对象。 在第二行中,a + 3的结果为8,结果对象的努力值为1。 在第三个中,它的工作量为3(a为1 +1)。 在第四步中,它的工作量为4.等等。
我尚未实现和测试它,但是它应该按照那些原则或多或少地起作用。
关于乱扔垃圾的注意事项: a + 2 + 3会使您计数3,但是2 + 3 + a可能会使您计数2(因为5仍然是整数,而不是操作数)。 因此,也许您想避免使用__r方法,而是为了安全起见……这取决于。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.