Python Cython魔术函数不起作用

Python Cython魔术函数不起作用,python,cython,jupyter,spyder,Python,Cython,Jupyter,Spyder,关于我的Python代码,我有3个问题(我对它相当陌生) 我正试图从我的Python代码中构建一个Cython代码,以使它工作得更快(希望如此)。我尝试了创建setup.py文件的方法,并成功地创建了该文件,直到运行了我创建的用于运行该文件的文件(另存为run_practice.py): 在terminal中,在terminal中出现错误,无法找到“3d”投影类型,因为我的代码在3d绘图中绘制值 我搜索了很多来解决这个问题,但实际上什么都没有。我的问题的一部分是如何解决这个问题 所以我发现了cy

关于我的Python代码,我有3个问题(我对它相当陌生) 我正试图从我的Python代码中构建一个Cython代码,以使它工作得更快(希望如此)。我尝试了创建setup.py文件的方法,并成功地创建了该文件,直到运行了我创建的用于运行该文件的文件(另存为run_practice.py):

在terminal中,在terminal中出现错误,无法找到“3d”投影类型,因为我的代码在3d绘图中绘制值

我搜索了很多来解决这个问题,但实际上什么都没有。我的问题的一部分是如何解决这个问题

所以我发现了cythonmagic方法。我读到cythonmagic现在是Cython包的一部分,并相应地调整了我的代码。我有当前版本的Anaconda和当前版本的Jupyter,以及Anaconda提供的几乎所有其他功能。我将我的Python代码复制并粘贴到Jupyter笔记本中,并让它运行,但问题如下: 我是用你的名字写代码的

%load_ext Cython
%%cython
然后粘贴我的代码。最后我得到一个错误,上面写着“文件”,第6行 %%赛昂 ^ SyntaxError:无效语法

这没有任何意义,因为加载Cython扩展没有任何问题,当我在第二行键入“%Cython”时,它建议我键入“%%Cython”,并且似乎可以从错误消息中读取magic函数(错误:root:line magic function
%Cython
)(但是cell magic
%%cython
存在,你的意思是这样吗?) ,并得到了这个语法错误。我之前也提到过,我有一个3d绘图,它是从我的代码生成的,当我在Jupyter笔记本中运行它时,它不会显示在任何地方,但在Spyder环境中工作正常。 这两个问题是我问题的B部分

这是我的全部代码。嵌套的for循环显然是代码的支柱。只是一个小小的基础,'分数'变量告诉我们在for循环中迭代'theta'和'beta'的准确度。分数=1时,运行时间为0.1499929428100586秒,但分数=0.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") 

这里真的有很多。当问问题时,尽可能快地找到问题的核心是很重要的。对不起,我知道有很多材料…我尽量把问题弄清楚。我不仅仅指代码,我还指你的问题主体。你应该能够在一段话中陈述你的问题。总之接下来的ng应该是你所做的研究。例如,你的问题的第6和第7段是不必要的,只需增加问题的长度。单元格魔法(
%%cython
)必须是单元格的第一行。将
%load\u ext cython
行放在自己的单元格中,然后开始下一个单元格(包含您的Cython代码)使用
%%Cython
"""
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")