【发布时间】:2015-11-02 17:45:59
【问题描述】:
有没有办法计算函数/表达式中数字运算(+、-、/、*)的数量?
以一个简单的线性代数问题为例 (Ax = b):
A_data = np.array([[1, -4, 1],
[1, 6, -1],
[2, -1, 2]], dtype=float)
b_data = np.array([[7],
[13],
[5]], dtype=float)
接下来,让我们应用高斯消去过程:
def gauss_elim(A, b):
Ab = np.column_stack((A, b))
for k, pivot_row in enumerate(Ab[:-1]):
for row in Ab[k+1:]:
if pivot_row[k] != 0:
row[k:] = row[k:] - pivot_row[k:] * row[k]/pivot_row[k]
return Ab
结果是:
array([[ 1. , -4. , 1. , 7. ],
[ 0. , 10. , -2. , 6. ],
[ 0. , 0. , 1.4, -13.2]])
我如何计算操作数?
注意:我知道可以事先通过数学计算运算次数(即对于 Gaussian elimination,它是 O(n^3))。
【问题讨论】:
-
numerically是什么意思? -
“有没有办法以数字方式评估数字运算(+、-、/、*)的数量。” - 有四个?
-
你也许可以使用
unittest.mock.Mock.call_count和object数组来做到这一点 -
numerically我的意思是在程序中计算它,而不是事先在数学上计算。在上面的例子中,我知道数学算术复杂度是 O(n^2),例如:en.wikipedia.org/wiki/…. -
@blaz 您是在谈论降低时间复杂度从而提高性能的性能吗?我仍然不清楚“数字”或事先的事情。
标签: python numpy recursion scipy