我被告知你可以使用PyPy来运行Python程序,因为它是使用JIT编译器编译而不是解释而快得多.
以下程序找到数字600851475143的最大素数因子:
import numpy as np
nr = 600851475143
n = 2
while n <= np.sqrt(nr):
if nr%n == 0:
nr = nr/n
n += 1
print(nr)
Run Code Online (Sandbox Code Playgroud)
使用PyPy运行它的程序是什么?
我知道他们的网站上有文档,但我不明白,并希望进行演示.
我使用Matplotlib基本上绘制'图片',而不是绘制数据.
在'图片'中,我plt.annotate用来标记图片的某些部分.
我现在想要制作一个完全自定义的图例来表示符号的含义.
有没有一种方法来定义自定义handles和labels,其中handles必须是字母数字字母代替正常的标志像'*'或'o'.
这是可能的还是我必须手动构建图例plt.annotation?
我知道Python主要比fortran和c / c ++等语言慢,因为它是解释而不是编译的。
我也读过的另一个原因是它很慢,因为它是动态类型的,即您不必声明变量类型,而是自动声明它。这非常好,因为它使代码看起来更简洁,而且您基本上不必太担心变量类型。
我知道这样做的理由不是很好,因为您可以包装例如。使用Python编写的fortran代码,但是是否可以手动覆盖Python的这种动态类型化性质并手动声明所有变量类型,从而提高Python的速度?
有没有办法从Notepad ++运行MATLAB脚本?
显然我的计算机上安装了MATLAB.我知道你可以设置一个路径,当你按F5时Notepad ++运行,但是当我设置这个路径到我的MATLAB.exe文件时,它只是打开另一个MATLAB实例.
这不是我想要的,我希望Notepad ++中的实际脚本在已经打开并运行的MATLAB实例中执行.
我想在Python中生成高斯分布,x和y维度表示位置,z维度表示某个数量的大小.
分布的最大值为2e6,标准差sigma = 0.025.
在MATLAB中,我可以这样做:
x1 = linspace(-1,1,30);
x2 = linspace(-1,1,30);
mu = [0,0];
Sigma = [.025,.025];
[X1,X2] = meshgrid(x1,x2);
F = mvnpdf([X1(:) X2(:)],mu,Sigma);
F = 314159.153*reshape(F,length(x2),length(x1));
surf(x1,x2,F);
Run Code Online (Sandbox Code Playgroud)
在Python中,到目前为止我所拥有的是:
x = np.linspace(-1,1,30)
y = np.linspace(-1,1,30)
mu = (np.median(x),np.median(y))
sigma = (.025,.025)
Run Code Online (Sandbox Code Playgroud)
有一个Numpy函数numpy.random.multivariate_normal可以和MATLAB的mvnpdf一样,但我很难找到文档.特别是在获得numpy.random.multivariate_normal所需的协方差矩阵时.
我有以下图表,我想使用Python和Matplotlib将数字化为高质量的出版物等级数字:

我使用数字化程序从3个数据集中的一个中获取一些样本:
x_data = np.array([
1,
1.2371,
1.6809,
2.89151,
5.13304,
9.23238,
])
y_data = np.array([
0.0688824,
0.0490012,
0.0332843,
0.0235889,
0.0222304,
0.0245952,
])
Run Code Online (Sandbox Code Playgroud)
我已经尝试了3种不同的方法来拟合这些数据点的曲线.第一种方法是使用通过点绘制样条曲线scipy.interpolate import spline
这导致(将实际数据点绘制为蓝色标记):

这显然没有好处.
我的第二次尝试是使用一系列不同的顺序polinimials绘制曲线拟合scipy.optimize import curve_fit.即使是四阶多项式,答案也是无用的(较低阶的更无用):

最后,我曾经scipy.interpolate import interp1d尝试在数据点之间进行插值.线性插值显然会产生预期的结果,但线条是直的,本练习的目的是获得一条漂亮的平滑曲线:
如果我然后使用三次插值我得到一个rubish结果,但是二次插值会产生稍微好一点的结果:

但它还没有完全存在,我认为interp1d不能进行更高阶的插值.
有没有人有一个很好的方法这样做?也许我会尝试在IPE或其他什么方面做得更好?
谢谢!
我是工程专业的研究生,我开始意识到技能编程对我的职业有多重要.在本科研究中,我们被介绍到MATLAB(实际八度),我曾经认为这是要走的路,但我一直在做一些研究,似乎科学界开始转向Python,通过它的numpy和scipy包裹,以惊人的速度.
我觉得我正处于"编程之旅"的开始阶段,并且几次被告知我应该选择一种语言并坚持下去.
我基本上已经决定要转移到Python,但是我想对我的决定有一些明智的意见吗?
我不打算开始一个MATLAB与Python风格的线程,因为这只会导致人们将他们的意见作为事实,我知道这不是这个论坛的风格.我只是在寻找验证,从MATLAB到Python的转变对于我这个位置的人来说是一个好主意.
PS我知道Python是免费的,MATLAB很昂贵,但这并不足以让我做出这个决定.
此处的代码是3d表面图的示例:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
Run Code Online (Sandbox Code Playgroud)
和收益率
有没有办法设置绘图视图,使其与xy轴完全垂直?这基本上将3-d曲线转换为2-d曲线,您可以使用颜色图来判断z变量的大小,而不是从z = 0基准位移.
我想在 Python 中使用 Matplotlib 绘制一个自指定的网格。
我知道这个np.meshgrid函数,可以用它来获取我想要连接的不同点的数组,但我不确定如何绘制网格。
代码示例:
x = np.linspace(0,100,100)
y = np.linspace(0,10,20)
xv, yv = np.meshgrid(x, y)
Run Code Online (Sandbox Code Playgroud)
现在,我如何绘制这个xv数组的网格?
我有以下曲线:

曲线由一组数据点定义.
如果围绕水平轴旋转360度,我该如何计算该曲线所包围的体积?
我可以使用数值积分计算曲线下面的区域,例如np.trapz,但我不确定下一步该做什么.