Python Cython魔术函数不工作

2024-10-01 13:33:20 发布

您现在位置:Python中文网/ 问答频道 /正文

关于我的Python代码,我有3个问题(我对它相当陌生) 我正在尝试从我正在工作的Python代码中构建一个Cython代码,以使它更快地工作(希望如此)。我试着用设置.py直到我运行了我用来运行它的文件(另存为run)_练习.py)公司名称:

 import pyximport; pyximport.install()
 import practice.pyx

在终端中得到一个错误,它找不到“3d”投影类型,因为我的代码在3d绘图中绘制值。在

我找了很多东西来解决这个问题,但实际上什么也没有。我问题的第一部分是如何解决这个问题。在

所以我遇到了cythonmagic方法。我读到cythonmagic现在是Cython包的一部分,并相应地调整了我的代码。我有当前版本的Python,也有当前版本的Jupyter和几乎所有其他Python提供。我把Python的问题复制到了笔记本上,然后把它粘贴到我的笔记本上: 我用

^{pr2}$

然后在后面粘贴我的代码。最后,我得到一个错误,上面写着“File”,第6行 %%赛顿 ^ 语法错误:语法无效

这是没有意义的,因为它在加载Cython扩展时没有任何问题,当我在第二行中输入'%Cython'时,它建议我键入''%Cython',而且从错误消息中可以读取这个神奇的函数'(错误:根目录:找不到Line magic函数%cython(但单元格魔术%%cython存在,确实存在你是说真的吗?)” ,得到了这个语法错误。我之前还提到过,我有一个由我的代码生成的3d绘图,当我在Jupyter笔记本中运行时,它不会出现在任何地方,但在Spyder环境中工作得很好。 这两个问题是我问题的B部分。在

这是我的总代码。嵌套的for循环显然是代码的支柱。只是一个小的基础,'Fraction'变量告诉我们'theta'和'beta'在for循环中迭代的精确程度。分数=1时,运行时间为0.1499929428100586秒,但分数=.1时,运行时间约为13秒(“分数”越小,精确度越高)。我需要代码有效地运行到至少10个小数位(分数=.0000000001或其他),这将完全冻结我的计算机(甚至在分数=0.005我的计算机冻结!)。任何关于优化的帮助都会非常有帮助!!非常感谢!在

也不要担心校正因子项是不是行空间数组…目前正在处理从for循环中迭代的第三个变量追加3d数组的问题。在

"""
Created on Tue Nov 22 23:13:40 2016
@author: Eric Holmes
"""
# Scattering formulas
# Eric Holmes
# Constants
import math
import numpy as np
import scipy as sc
import matplotlib.pyplot as plt
import pvlib as pv
from mpl_toolkits.mplot3d import Axes3D
import time
fig = plt.figure()
ax = fig.gca(projection='3d')
h = 6.62607004e-34 # Plank Constant m^2*kg/s
c = 299792458 # Speed of light m/s
m = 9.10938356e-31 # Mass kg
r = 2.8179403267e-15
pi = 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273
try:
    InitialElectronVelocity = float(input("Enter Initial Electron Velocity: "))
except ValueError:
    InitialElectronVelocity = 2e8
try:
    InitialPhotonWavelength = float(input("Enter Initial Photon Wavelength: "))
except ValueError:
    InitialPhotonWavelength = 2.426310236092620e-12
try:
    MinALPHAAngleEvaluated = float(input("Enter Min ALPHA Angle Evaluated: ")) 
except ValueError:
    MinALPHAAngleEvaluated = 90
try:
    MaxALPHAAngleEvaluated = float(input("Enter Max ALPHA Angle Evaluated: ")) 
except ValueError:
    MaxALPHAAngleEvaluated = 90
try:
    Fraction = float(input("Enter Fraction: ")) 
except ValueError:
    Fraction = 1
try:
    THETABETAMINANGLEEVALUATED = float(input("Enter THETA/BETA MIN ANGLE EVALUATED: "))
except ValueError:
    THETABETAMINANGLEEVALUATED = 0
try:
    THETABETAMAXANGLEEVALUATED = float(input("Enter THETA/BETA MAX ANGLE EVALUATED: "))
except ValueError:
    THETABETAMAXANGLEEVALUATED = 90
start = time.time()
gamma = 1/(math.sqrt(1-((InitialElectronVelocity**2)/(c**2))))       
Elambda1 = ((h*c)/InitialPhotonWavelength)                        
Eelectron1 = (gamma*m*(c**2))                                        
SCALEDALPHAMinAngle = MinALPHAAngleEvaluated/Fraction                       
SCALEDALPHAMaxAngle = MaxALPHAAngleEvaluated/Fraction                       
JJ = ((SCALEDALPHAMaxAngle - SCALEDALPHAMinAngle)/Fraction)
QQ = (JJ + (1/Fraction))*Fraction                           
CORRECTIONFACTOR1 = ((SCALEDALPHAMinAngle) - (1))                         
if SCALEDALPHAMinAngle == SCALEDALPHAMaxAngle:
    CORRECTIONFACTOR2 = np.linspace(1,1,1)                                                
else:
    CORRECTIONFACTOR2 = np.linspace(SCALEDALPHAMinAngle,SCALEDALPHAMaxAngle,QQ)   
SCALEDTHETABETAMinAngle = THETABETAMINANGLEEVALUATED/Fraction                  
SCALEDTHETABETAMaxAngle = THETABETAMAXANGLEEVALUATED/Fraction                   
JJJ = ((SCALEDTHETABETAMaxAngle - SCALEDTHETABETAMinAngle)/Fraction) 
QQQ = (JJJ + (1/Fraction))*Fraction                        
CORRECTIONFACTOR3 = ((SCALEDTHETABETAMinAngle) - 1)                    
if SCALEDTHETABETAMinAngle == SCALEDTHETABETAMaxAngle:
    CORRECTIONFACTOR4 = np.linspace(1,1,1)
else:                                        
    CORRECTIONFACTOR4 = np.linspace(SCALEDTHETABETAMinAngle,SCALEDTHETABETAMaxAngle,QQQ)
length1 = np.shape(CORRECTIONFACTOR4)
length2 = np.shape(CORRECTIONFACTOR2)
int1 = length1[0] 
int2 = length2[0]
int3 = int1 + 1
int4 = int2 + 1
alpha = 1
matrix1 = []
for theta in range(1,int3):
    i = theta - 1
    matrix1.append([])
    for beta in range(1,int3):
        Elambda2 = ((h*c*(((InitialElectronVelocity*pv.tools.cosd((alpha + CORRECTIONFACTOR1)*Fraction))-c)))/((((h/(m*gamma)))*(pv.tools.cosd((theta + CORRECTIONFACTOR3)*Fraction)-1))-(InitialPhotonWavelength*(c-(InitialElectronVelocity*pv.tools.cosd((beta + CORRECTIONFACTOR3)*Fraction))))))
        DifferentialCrossSection = (((pi*(r**2))/2)*((m**2)/(Elambda1*(Eelectron1**2)))*((((m**4)/(4*(Elambda1**2)*(Eelectron1**2))) * (((Elambda2/(Eelectron1-Elambda2)))**2)) - (((m**2)/(Elambda1*Eelectron1))*((Elambda2/(Eelectron1-Elambda2)))) + ((Eelectron1 - Elambda2)/(Eelectron1)) + ((Eelectron1/(Eelectron1-Elambda2)))))          
        matrix1[i].append(DifferentialCrossSection)     
Y = np.linspace(SCALEDTHETABETAMinAngle,SCALEDTHETABETAMaxAngle,QQQ) 
Z = np.reshape(Y,(int1,1))                 
theta = np.tile(Z,(1,int1))
beta  = np.tile(Y,(int1,1)) 
ax.plot_wireframe((theta*Fraction),(beta*Fraction),matrix1)
matrix2 = np.reshape(matrix1,(1,(int1*int1)))
minimum = np.amin(matrix2)
maximum = np.amax(matrix2)
ax.auto_scale_xyz([THETABETAMINANGLEEVALUATED, THETABETAMAXANGLEEVALUATED], [THETABETAMINANGLEEVALUATED, THETABETAMAXANGLEEVALUATED], [minimum, maximum])   
end = time.time()
print("Code Run Time =",(end - start),"seconds") 

Tags: 代码importinputnpfloatentertryvalueerror