Questions tagged «python»

一种通用的高级编程语言,着重于简化代码语法和可读性。

6
Python与FORTRAN
哪个更好:FORTRAN还是Python?我想在两种情况下都需要Gnuplot,对吗? 我目前正在Windows机器上工作。 我想用它来获得物理问题的数值解决方案,包括蒙特卡洛模拟,数值积分和微分,分子动力学等。 我看过一门有关计算物理的课程,其中介绍了FORTRAN(我相信是77)和Python。我打算从一个开始,然后再学习另一个,但是我不知道哪个过渡可能是最简单的。 您还会推荐哪些编译器? 对我而言,基本问题归结为:哪个是最容易学习的,哪个是最快的,哪个是最人性化的,最重要的是哪个是最常用的(因此将这4个进行比较)?除此之外,最常用的(免费或付费)编译器是什么?我目前正在考虑将旧的笔记本电脑(早期的英特尔双核)转换为Linux。希望那足够快。 到目前为止,非常感谢您提供答案!与我正在寻找的答案是LKlevin和SAAD的答案。 如果有任何帮助,我几乎完全了解C ++,Maple的基础知识,并且几乎完全掌握了MATLAB和Mathematica9。
17 python  fortran 

3

1
牛顿-克里洛夫什么时候不适合求解?
最近,我一直在比较来自scipy的不同非线性求解器,并且尤其对《 Scipy Cookbook》中的Newton-Krylov示例印象深刻,在该示例中,他们用大约20行代码来求解带有非线性反应项的二阶微分方程组。 我修改了示例代码,以解决半导体异质结构的非线性Poisson方程(也称为Poisson-Boltzmann方程,请参见本说明中的第17页),其形式为: d2ϕdx2−k(x)(p(x,ϕ)−n(x,ϕ)+N+(x))=0d2ϕdx2−k(x)(p(x,ϕ)−n(x,ϕ)+N+(x))=0 \frac{d^2\phi}{dx^2} - k(x) \left(p(x,\phi) - n(x,\phi) + N^{+}(x)\right) = 0 (这是传递给求解器的残差函数。) 这是一个静电问题,其中和是形式为n_i(x)e ^ {-(E_i(x,\ phi)-E_f)}的非线性函数。此处的细节并不重要,但关键是非线性函数随\ phi呈指数变化,因此残差函数可以在很大的范围内(10 ^ {-6}-10 ^ {16})发生微小变化。在\ phi中n(x,ϕ)n(x,ϕ)n(x,\phi)p(x,ϕ)p(x,ϕ)p(x,\phi)ni(x)e−(Ei(x,ϕ)−Ef)ni(x)e−(Ei(x,ϕ)−Ef)n_i(x) e^{-(E_i(x,\phi) - E_f)}ϕϕ\phi10−6−1016)10−6−1016)10^{-6} - 10^{16})ϕϕ\phi。 我用scipy的Newton-Krylov用数值方法求解了这个方程,但是它永远不会收敛(实际上,在计算雅可比方程时总是会报告一个错误)。我从Newton-Krylov求解器切换为fsolve(基于MINPACK hybrd),它第一次起作用! 牛顿-克里洛夫(Newton-Krylov)不适合某些问题的一般原因吗?输入方程是否需要以某种方式进行调节? 也许需要更多信息来发表评论,但是为什么您认为fsolve在这种情况下有效?

3
Matlab神经网络工具箱的Python OSS替代品。有什么比较吗?
我希望自己的科研工作独立于商业软件。我发现对像Matlab这样的商业软件包及其工具箱的依赖性不理想,因为我不知道将来是否可以使用Matlab,并且因为我不喜欢这种语言。因此,我正在寻找替代方案。 幸运的是,我精通Python(并且我很喜欢这种语言),并且通过NumPy,SciPy,Matplotlib,Basemap和NetCDF读写例程,它可以满足我的大多数需求。大多数-当我需要使用前馈多层感知器(例如使用人工神经网络)来训练卫星检索时,我仍然回到Matlab。 与开源软件不同寻常的是,有不止一个软件包可以执行神经网络。不止一个: 不久前,我尝试了“用于神经网络的瑞士军刀” PyBrain,但在短时间内(开发时间和运行时间)都没有获得令人满意的结果。也许我没有尽力而为,或者它并不是真正针对我的实际需求。 刚才我发现有一个名为Neurolab的程序包,它看起来很有前途:一个简单而强大的Python神经网络库,带有一个MATLAB的API,例如Neural Network Toolbox(NNT)。 有FFnet,快速和易于使用的前馈Python的神经网络培训解决方案 有simplenn 有Peach,一个用于计算智能和机器学习的库 有Python绑定到FANN的快速人工神经网络库,描述为在这个StackOverflow的职位事实上的标准。 可能还有其他人。 是否有人根据易用性,速度等标准,对不同的选项进行了比较?我自己的用例是卫星检索,例如,拟合许多变量的强非线性函数。我非常一个用户神经网络的; 我对研究他们的内部运作方式不感兴趣。 有关Stats.SE的这个问题是相关的,但重点不同。

2
(如何)编写运行速度更快的模拟?
我已经开始使用python作为编程语言来执行CFD中的所有作业。我在编程方面经验很少。我来自机械工程领域,正在从事航空航天工程的高等教育。 有时,CFD的计算方面比处理方程式或进行数学运算更乏味。 有哪些一般准则可以使我们的程序运行更快?做并行处理的技巧是什么?如何编写运行速度更快的代码? 我在哪里可以得到回答上述问题的资源(对于像我这样的外行人来说很容易理解)?

3
具有大数据集的计算问题的I / O策略?
我的研究小组专注于分子动力学,分子动力学显然可以生成千兆字节的数据作为单个轨迹的一部分,然后必须对其进行分析。 我们关注的几个问题涉及数据集中的相关性,这意味着我们需要跟踪内存中的大量数据并对其进行分析,而不是使用更多的顺序方法。 我想知道的是将大型数据集的I / O处理为脚本的最有效策略是什么。我们通常使用基于Python的脚本,因为它使对文件I / O的编码比使用C或Fortran的痛苦少得多,但是当我们有成千上万的行需要处理时,尚不清楚最好的方法是什么。我们应该考虑使用C语言编写文件输入部分,还是另一种策略更有用?(简单地将整个数组预加载到内存中会比一系列顺序读取“块”(兆字节)更好吗? 一些附加说明: 因此,我们主要是在寻找用于后处理的脚本工具,而不是“在线”工具-因此要使用Python。 D = 16林Δ 吨→交通∞⟨ (X(吨+ Δ 吨)- X(吨))2⟩d=1个6林ΔŤ→∞⟨(X(Ť+ΔŤ)-X(Ť))2⟩D = \frac{1}{6} \lim_{\Delta t \rightarrow \infty} \left< \left( {\bf x}(t + \Delta t) - {\bf x}(t) \right)^2 \right>
15 python  c  efficiency 

1
在谐波振荡器的情况下,为什么SciPy eigsh()会产生错误的特征值?
我正在开发一些更大的代码,以在计算物理学的背景下执行巨大的稀疏矩阵的特征值计算。由于特征值在分析上是众所周知的,因此我在一维上针对简单的谐波振荡器测试了例程。这样做并将我自己的例程与SciPy的内置求解器进行比较,我遇到了下图中显示的异常情况。在这里可以看到第一个100个数值地计算本征值和分析本征值λ 一个Ñ 一个λñ ü 米λñü米\lambda_{num}λ一个ñ 一λ一种ñ一种\lambda_{ana} 在特征值40附近,数值结果开始与分析结果有所不同。这并不令我感到惊讶(除非在讨论中提到,否则我不会在这里解释原因)。但是,令我惊讶的是eigsh()会生成简并的特征值(大约特征值80)。为什么即使很少的特征值,eigsh()的行为也是如此? import numpy as np from scipy.sparse.linalg import eigsh import myFunctions as myFunc import matplotlib.pyplot as plt #discretize x-axis N = 100 xmin = -10. xmax = 10. accuracy = 1e-5 #stepsize h = (xmax - xmin) / (N + 1.) #exclude first and …

1
使用Python和双精度现代GPU进行科学计算
这里有没有人通过Python在新一代(例如K20)GPU中使用过双精度科学计算? 我知道这项技术正在迅速发展,但是目前最好的方法是什么?GPU超出了流行的科学Python库numpy和scipy的范围,我曾经想使用theano,但它似乎只对GPU使用float32精度。我知道google可以为python gpu提供搜索结果,但我希望获得比可能会或可能不会会见其制造商的项目列表更多的见识。
14 python  gpu  precision 

3
如何使用numpy slices表达这种复杂的表达式
我希望在Python中实现以下表达式: 其中和是大小为 numpy数组,是一个大小为的numpy数组。大小可能最大约为10000,并且该函数是内部循环的一部分,该循环将被多次评估,因此速度非常重要。X一世= ∑j = 1i − 1ķ我- Ĵ ,Ĵ一种一世 − j一种Ĵ,X一世=∑Ĵ=1个一世-1个ķ一世-Ĵ,Ĵ一种一世-Ĵ一种Ĵ, x_i = \sum_{j=1}^{i-1}k_{i-j,j}a_{i-j}a_j, XXxÿÿyññnķķkn × nñ×ñn\times nññn 理想情况下,我希望完全避免for循环,尽管我想如果有一个循环就不是世界末日了。问题是我很难在没有几个嵌套循环的情况下查看如何做到这一点,这可能会使它变得很慢。 有人可以看到如何使用numpy高效且容易理解的方式表达上述方程吗?更一般而言,解决此类问题的最佳方法是什么?
14 python  numpy 

4
为了使读者可以清楚地将结果与生成结果的代码相匹配,最有用的方法是为论文编写代码?
我正在写一篇可复制的论文,该论文具有由Python脚本生成的计算结果(类似的MATLAB脚本生成几乎相同的结果)。我认为,如果读者可以将论文中的计算结果与代码中的计算结果相匹配,则读者会更容易理解本文。该工作提出了一种抽象的形式主义,并且本文中的示例应使这种形式主义对读者(其中很多是工程师)更加具体。该代码可能是有关如何执行计算的最详细记录,并且将其弄清楚可以在审核过程中为我们提供帮助。 是否有人对如何使代码与计算结果(数字,方程式)之间的对应关系更清晰有任何建议? 例如,我当时在想实现本文中各个步骤的代码行,我可以引用方程式编号(如果我可以在代码和LaTeX之间进行交叉引用,那真是太神奇了,但是手动标记它们就可以了) ,我可以编写与各种示例和图相对应的函数,例如 def example_1(): # Insert code corresponding to first example pass def figure_1(): # Insert code that generates Figure 1 pass 如果代码很大,而我并不想解释工程中使用的一堆不同的数学方法实际上是如何相同的,那么我可能不会很费心地使代码清晰明了,但是鉴于代码的抽象性质本文和少量的代码基础,似乎在此练习中可能有价值。

2
为什么Matlab的整体性能优于Scipy?
对于Matlab处理数值积分与Scipy的方式,我感到有些沮丧。我在下面的测试代码中观察到以下差异: Matlab的版本平均运行速度比我的python 快24倍! Matlab的版本能够在没有警告的情况下计算积分,而python返回 nan+nanj 关于上述两点,我该怎么做才能确保在python中获得相同的性能?根据文档,这两种方法都应使用“全局自适应正交”来近似积分。 下面是这两个版本中的代码(尽管python要求创建一个积分函数以便它可以处理复杂的被积数,但两者非常相似。) 蟒蛇 import numpy as np from scipy import integrate import time def integral(integrand, a, b, arg): def real_func(x,arg): return np.real(integrand(x,arg)) def imag_func(x,arg): return np.imag(integrand(x,arg)) real_integral = integrate.quad(real_func, a, b, args=(arg)) imag_integral = integrate.quad(imag_func, a, b, args=(arg)) return real_integral[0] + 1j*imag_integral[0] vintegral = np.vectorize(integral) …

1
如何避免python函数中的灾难性取消?
我无法在数字上实现函数。它受到以下事实的困扰:在较大的输入值下,结果是很大的数乘以很小的数。我不确定灾难性取消是否是正确的术语,因此请纠正我。出现问题的证据: 对于6的较大输入,如何避免振荡和0.0的赋值? 这是我的功能: import numpy as np def func(x): t = np.exp(-np.pi*x) return 1/t*(1-np.sqrt(1-t**2))

3
了解Numpy如何执行SVD
我一直在使用不同的方法来计算矩阵的秩和矩阵方程组的解。我遇到了功能linalg.svd。与我自己用高斯消除法求解系统的努力相比,它看起来既更快又更精确。我试图了解这是怎么可能的。 据我所知,linalg.svd函数使用QR算法来计算矩阵的特征值。我知道这在数学上是如何工作的,但是我不知道Numpy如何如此迅速地做到这一点而又不会损失太多精度。 所以我的问题是:numpy.svd函数如何工作,更具体地说,如何快速,准确地实现它(与高斯消去相比)?

2
在python中计算非常大且稀疏的邻接矩阵的所有特征值的最快方法是什么?
我试图找出一种比使用scipy.sparse.linalg.eigsh更快的方法来计算非常大且稀疏的邻接矩阵的所有特征值和特征向量,据我所知,此方法仅使用稀疏性和矩阵的对称属性。邻接矩阵也是二进制的,这使我认为有一种更快的方法可以实现。 我创建了一个随机的1000x1000稀疏邻接矩阵,并在x230 ubuntu 13.04笔记本电脑上比较了几种方法: scipy.sparse.linalg.eigs:0.65秒 scipy.sparse.linalg.eigsh:0.44秒 scipy.linalg.eig:6.09秒 scipy.linalg.eigh:1.60秒 对于稀疏的eigs和eigsh,我将所需特征值和特征向量的数量k设置为矩阵的秩。 问题始于更大的矩阵-在9000x9000矩阵上,scipy.sparse.linalg.eigsh花了45分钟!

2
用Python解决线性约束最小二乘问题
我要解决 s 。Ť 。分X∥ 甲X - b ∥22,∑一世X一世= 1 ,X一世≥ 0 ,∀ 我。minx‖Ax−b‖22,s.t.∑ixi=1,xi≥0,∀i.\begin{alignat}{1} & \min_{x}\|Ax - b\|^2_{2}, \\ \mathrm{s.t.} & \quad\sum_{i}x_{i} = 1, \\ & \quad x_{i} \geq 0, \quad \forall{i}. \end{alignat} 我认为这是一个二次问题,可以使用CVXOPT解决,但我不知道如何解决。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.