【发布时间】:2021-02-03 22:24:43
【问题描述】:
对于我的班级,我需要使用 NumPy 编写更优化的数学函数。问题是,当使用 NumPy 时,我的解决方案在使用原生 Python 时会更慢。
- 对数组的所有元素求和并求和的函数
Python:
def cube(x):
result = 0
for i in range(len(x)):
result += x[i] ** 3
return result
我的,使用 NumPy(慢 15-30%):
def cube(x):
it = numpy.nditer([x, None])
for a, b in it:
b[...] = a*a*a
return numpy.sum(it.operands[1])
- 一些随机计算函数
Python:
def calc(x):
m = sum(x) / len(x)
result = 0
for i in range(len(x)):
result += (x[i] - m)**4
return result / len(x)
NumPy(>10 倍慢):
def calc(x):
m = numpy.mean(x)
result = 0
for i in range(len(x)):
result += numpy.power((x[i] - m), 4)
return result / len(x)
我不知道如何解决这个问题,到目前为止我已经尝试过 NumPy 的随机函数
【问题讨论】:
-
我不认为你掌握了如何使用
numpy。例如,您的第一个numpy解决方案应该是(x**3).sum() -
numpy很快,因为它可以利用向量化的函数调用;你正在做的事情造成巨大的开销,我很惊讶它实际上仍然只慢了 30%。在我的机器上,numpy即使使用大小约为 10000 的小型阵列,当您正确使用它时,它的速度也提高了 10 倍,正如@user3483203 所描述的那样
标签: python performance numpy