小编Wrz*_*mft的帖子

Python无比较:我应该使用"是"还是==?

可能重复:
`==`运算符何时不等于`is`运算符?(蟒蛇)

我使用的是Python 2.x.

我比较时编辑给了我一个"警告"下划线my_var == None,但是当我使用时没有警告my_var is None.

我在Python shell中做了一个测试,并确定两者都是有效的语法,但我的编辑器似乎说这my_var is None是首选.

是这种情况,如果是这样,为什么?

python comparison nonetype

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

在Perf的注释视图中获取绝对值而不是百分比是多少?

在Perf的注释视图中,每条指令消耗的运行时间在左侧以百分比形式给出.是否有一些选项可以显示一些绝对数量(可能是样本)?

背景

我使用经典C数组的一些C代码以及Numpy Arrays(用于Python模块),我想通过在一些相同的示例案例上运行来比较性能.有一些部分(例如,初始化),我知道它们的性能不同而且我不感兴趣.但是,它们会影响总运行时间,从而使其他部分的百分比值无法比较 - 除非我想自己转换值.如果我可以访问总运行时间,我可以轻松地逐个比较不同的变体.

profiling perf

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

在C或C++中,我可以对哪些文件可以包含我的头文件施加限制

在C/C++中,我编写了一个可供所有人使用的头文件,但是我想限制包含它的文件.如果我的头文件包含在"未授权"的c/cxx文件中,是否有任何方法可以生成编译器错误?

c include header-files

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

删除 SymPy 系列扩展中的混合变量项

考虑 SymPy 符号e和 的两个函数i

from sympy import Symbol, expand, Order
i = Symbol('i')
e = Symbol('e')
f = (i**3 + i**2 + i + 1)
g = (e**3 + e**2 + e + 1)
z = expand(f*g)
Run Code Online (Sandbox Code Playgroud)

这将产生

z = e**3*i**3 + e**3*i**2 + e**3*i + e**3 + e**2*i**3 + e**2*i**2 + e**2*i + e**2 + e*i**3 + e*i**2 + e*i + e + i**3 + i**2 + i + 1
Run Code Online (Sandbox Code Playgroud)

然而,假设ei都很小,我们可以忽略三阶或更高阶的两个项。使用 …

python big-o sympy polynomial-approximations

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

如何使用SymPy加速长函数的符号导数?

我正在用 Python 编写一个程序来使用自由 ICI 方法求解薛定谔方程(好吧,现在是 SICI 方法......但它会变成自由 ICI)。如果这听起来不熟悉,那是因为关于该主题的信息很少,而且绝对没有示例代码可供使用。

该过程涉及迭代地得出偏微分方程的解。在这样做时,需要执行许多符号导数。问题是,随着程序运行,需要微分的函数会越来越大,以至于到第五次迭代时,计算符号导数需要大量时间。

我需要加快速度,因为我希望能够实现至少 30 次迭代,而且我希望在我退休之前做到这一点。

我已经完成并删除了不必要的重复计算(或者至少是我所知道的那些),这有很大帮助。除此之外,我完全不知道如何加快速度。

这是包含计算导数的inf_integrate函数的代码(该函数只是复合辛普森的方法,因为它比使用 SymPy 的方法快得多integrate,并且不会因振荡函数而引发错误):

from sympy import *


def inf_integrate(fun, n, a, b):
    f = lambdify(r, fun)
    h = (b-a)/n
    XI0 = f(a) + f(b)
    XI1 = 0
    XI2 = 0

    for i in range(1, n):
        X = a + i*h

        if i % 2 == 0:
            XI2 = XI2 + f(X)
        else:
            XI1 = XI1 + f(X)

    XI = h*(XI0 + 2*XI2 + …
Run Code Online (Sandbox Code Playgroud)

python optimization sympy integral derivative

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

使用 JiTCDDE 的意外解决方案

我正在尝试使用 Python 研究以下延迟微分方程的行为:

\n
y\'\'(t) = -y(t)/\xcf\x84^2 - 2y\'(t)/\xcf\x84 - Nd*f(y(t-T))/\xcf\x84^2,\n
Run Code Online (Sandbox Code Playgroud)\n

其中f是截止函数,当其参数的绝对值在 1 到 10 之间时,它本质上等于恒等式,否则等于 0(见图 1),并且 、 和Nd\xcf\x84常数T

\n

图 1:函数 f 的绘图

\n

为此,我使用 JiTCDDE 包。这为上式提供了合理的解。尽管如此,当我尝试在方程右侧添加噪声时,我得到了一个在几次振荡后稳定为非零常数的解。这不是方程的数学解(唯一可能的常数解等于零)。我不明白为什么会出现这个问题以及是否可以解决它。

\n

我在下面重现我的代码。这里,为了简单起见,我用高频余弦代替噪声,将其引入方程组作为虚拟变量的初始条件(余弦可以直接引入系统,但对于一般噪音这似乎不可能)。为了进一步简化问题,我还删除了涉及该函数的术语f,因为没有它也会出现问题。图 2 显示了代码给出的函数图。

\n

图 2:代码给出的解图

\n
from jitcdde import jitcdde, y, t\nimport numpy as np\nfrom matplotlib import pyplot as plt\nimport math\nfrom chspy import CubicHermiteSpline\n\n\n# Definition of function f:\ndef functionf(x):\n    return x/4*(1+symengine.erf(x**2-Bmin**2))*(1-symengine.erf(x**2-Bmax**2))\n\n#parameters:\n\xcf\x84 = 42.9\nT = 35.33\nNd = 8.32\n\n# Definition of the initial conditions:\ndt = .01 …
Run Code Online (Sandbox Code Playgroud)

python-3.x differential-equations numerical-stability jitcode-jitcdde-jitcsde

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

在 Sphinx 中使用 default_role = "any" 抑制未找到引用的警告

any在使用 Sphinx 构建文档时,我将其用作默认角色,它按预期工作,自动链接一些标记的引用并将其他引用格式化为代码,同时避免标记使文档字符串混乱。

\n\n

不幸的是,当以这种方式构建文档时,输出中充满了any无法找到目标的参考的警告:

\n\n
WARNING: \'any\' reference target not found: [\xe2\x80\xa6]\n
Run Code Online (Sandbox Code Playgroud)\n\n

有什么办法可以抑制这些警告吗?

\n\n

到目前为止,我能以这种方式找到的唯一资源是这个问题,但是它具体涉及一个完全不同的警告。

\n

suppress-warnings python-sphinx

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

将文本文件作为字符串的2D数组加载,而不指定列数

假设我有一个纯文本文件test.dat:

foo bar baz
qux ham spam
Run Code Online (Sandbox Code Playgroud)

我知道想要将其加载到Octave(或必要时的Matlab)作为二维单元阵列,保留以空白和换行编码的结构.根据我对文档的理解,以下应该是要​​走的路:

format = '%s';
file = fopen('test.dat');
data = textscan(file,format);
fclose(file);
disp(data);
Run Code Online (Sandbox Code Playgroud)

但是,这仅将数据作为一维数组加载:

{
  [1,1] = 
  {
    [1,1] = foo
    [2,1] = bar
    [3,1] = baz
    [4,1] = qux
    [5,1] = ham
    [6,1] = spam
  }
}
Run Code Online (Sandbox Code Playgroud)

明确指定Delimiter,Whitespace并且EndOfLine没有帮助(后者的意义是什么?); 也没有使用其他加载函数,如textreaddlmread.format = '%s%s%s'在上面的工作中使用了什么,但这要求我以某种方式识别列的数量,该函数应该能够自己完成.

因此我问:是否有任何内置功能可以满足我的需求?我对自己编写这样一个函数的方式不感兴趣 - 我相信我能做到这一点,但这正是我想要避免的(因为我需要用它来展示良好的实践,因此不能重新发明轮子).

相关问答(所有工作都知道列数):

csv file-io matlab octave

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

来自scypy python模块的odeint()如何工作?

我是一名有兴趣以数字方式解决ODE的物理学生.我通常使用Runge-Kutta方法在C中编写自己的求解器.

我最近学习了Python,并使用SciPy的odeint函数来解决ODE.但我担心函数算法是如何工作的,因为它不采用步长参数.那么,我怎样才能了解它是如何工作的?我怎么知道他们的结果的精确度是多少?

我查阅了这个文档,但它没有提供太多信息,我也不太了解他们描述的可选参数.

python scipy numerical-methods differential-equations runge-kutta

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

为什么旧版本的“A byte of Python”声称 # 是小于等于运算符?

有人刚刚向我展示了A byte of PythonPDF 版本。根据它本身,它是 3.0 版(本书的,不是 Python 的)和 2014 年的。在操作符部分有一个部分是

# (小于或等于)

返回 x 是否小于或等于 y
x = 3; y = 6; x # y返回True

在 Python 2.7 和 Python 3.6 中,这显然是错误的。这也是非常糟糕的设计,因为#它也是注释操作符。

当前版本将此从 更改#<=。我很好奇为什么旧版本声称这一点。

到目前为止我的研究和想法

  • 我在 Internet 上找不到任何旧版本的 Python 允许这样做的内容。
  • 我找不到任何更改日志或勘误表。
  • 由于假定的错误犯了两次,我不希望它是一个错字。
  • 我不希望它是一些自动转换错误,因为它必须将两个 ASCII 字符 ( <=) 转换为一个 ( #)。

python operators python-2.x

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

Gnuplot 中的高斯峰不重叠

我正在尝试使用 Gnuplot 在同一张图上绘制多个高斯函数,这是一件非常简单的事情。问题是峰值不重叠,我得到以下结果,看起来它们有不同的峰值,但它们没有。我怎样才能解决这个问题?

丑事

math graphing gnuplot gaussian

2
推荐指数
1
解决办法
550
查看次数

为什么log(xy)= log(x)+ log(y)在SymPy中不起作用?

为什么log(xy)= log(x)+ log(y)在SymPy中不起作用?

我试过这个:

from sympy import *
var('x y')
print(simplify(log(x*y)))
print(expand(log(x*y)))
print(collect(log(x*y),x))
print(solve(log(x*y),x))
# log(x*y)
# log(x*y)
# log(x*y)
# [1/y]
Run Code Online (Sandbox Code Playgroud)

python sympy

2
推荐指数
1
解决办法
88
查看次数