相关疑难解决方法(0)

Python中的指数 - 我应该更喜欢**运算符而不是math.pow和math.sqrt吗?

在我的领域中,将一些数字对齐,一起操作它们并取结果的平方根是很常见的.例如,这在毕达哥拉斯定理和RMS计算中完成.

在numpy中,我做了以下事情:

result = numpy.sqrt(numpy.sum(numpy.pow(some_vector, 2)))
Run Code Online (Sandbox Code Playgroud)

在纯python中会出现这样的情况:

result = math.sqrt(math.pow(A, 2) + math.pow(B,2)) # example with two dimensions.
Run Code Online (Sandbox Code Playgroud)

但是,我一直在使用这种纯Python形式,因为我发现它更紧凑,独立于导入,看似相同:

result = (A**2 + B**2)**0.5   # two dimensions
result = (A**2 + B**2 + C**2 + D**2)**0.5
Run Code Online (Sandbox Code Playgroud)

我听说有些人认为**运算符是一种黑客攻击,并且通过对它进行取幂来对数字进行求数0.5是不可读的.但我想问的是:

"有没有任何计算理由更喜欢前两种替代品而不是第三种替代品?"

谢谢阅读!

python math exponentiation

57
推荐指数
2
解决办法
12万
查看次数

53
推荐指数
3
解决办法
7万
查看次数

为什么 math.sqrt 比幂运算慢得多?

我简直不敢相信我刚刚测量的结果:

python3 -m timeit -s "from math import sqrt" "sqrt(2)"
5000000 loops, best of 5: 42.8 nsec per loop

python3 -m timeit "2 ** 0.5"
50000000 loops, best of 5: 4.93 nsec per loop
Run Code Online (Sandbox Code Playgroud)

这违背了任何直觉……它应该正好相反!

macOS Catalina 上的 Python 3.8.3

python performance python-3.8 macos-catalina

52
推荐指数
2
解决办法
2134
查看次数

哪个更准确,x**.5还是math.sqrt(x)?

我最近发现x**.5并且math.sqrt(x)并不总是在Python中产生相同的结果:

Python 2.6.1 (r261:67517, Dec 4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)]
on win32
>>> 8885558**.5 - math.sqrt(8885558)
-4.5474735088646412e-13
Run Code Online (Sandbox Code Playgroud)

检查低于10**7的所有整数,这两种方法对几乎正好0.1%的样本产生不同的结果,对于较大的数字,误差的大小增加(缓慢).

所以问题是,哪种方法更准确?

python floating-point

22
推荐指数
3
解决办法
6028
查看次数

如何在不使用数学模块的情况下执行平方根?

我想在不使用数学模块的情况下找到数字的平方根,因为我需要调用该函数大约20k次并且不想通过在每次调用函数时链接到数学模块来减慢执行速度

有没有更快更容易找到平方根的方法?

python

14
推荐指数
5
解决办法
4万
查看次数

math.py和sys.py在哪里?

我在Python33/Lib中找到了所有其他模块,但我找不到这些.我确信还有其他人"失踪",但这些是我注意到的唯一.我导入它们时工作得很好,我找不到它们.我检查了sys.path,他们不在那里的任何地方.它们是内置的还是什么?

python python-module python-3.x

11
推荐指数
1
解决办法
1万
查看次数

为什么Python中的计算点距离如此之慢?

我的Python程序太慢了.因此,我对其进行了分析,发现大部分时间都花在计算两点之间距离的函数上(一个点是3个Python浮点数的列表):

def get_dist(pt0, pt1):
    val = 0
    for i in range(3):
        val += (pt0[i] - pt1[i]) ** 2
    val = math.sqrt(val)
    return val
Run Code Online (Sandbox Code Playgroud)

为了分析为什么这个函数这么慢,我编写了两个测试程序:一个用Python编写,一个用C++编写类似的计算.他们计算了100万对点之间的距离.(Python和C++中的测试代码如下.)

Python计算需要2秒,而C++需要0.02秒.100倍的差异!

为什么Python代码比C++代码这么简单的数学计算要慢得多?如何加快速度以匹配C++性能?

用于测试的Python代码:

import math, random, time

num = 1000000

# Generate random points and numbers

pt_list = []
rand_list = []

for i in range(num):
    pt = []
    for j in range(3):
        pt.append(random.random())
    pt_list.append(pt)
    rand_list.append(random.randint(0, num - 1))

# Compute

beg_time = time.clock()
dist = …
Run Code Online (Sandbox Code Playgroud)

python performance

5
推荐指数
1
解决办法
1271
查看次数

使用数学模块中的平方根函数

我知道我可以使用找到表达式的平方根math.sqrt(x).

我也知道我可以找到平方根x**0.5.

两个为什么呢?这不是非pythonic吗?有什么用的math.sqrt()时候,我们可以直接将其提升到0.5次方?

python math square-root

3
推荐指数
1
解决办法
1116
查看次数