2017-07-15 24 views
0

私はこれを達成する方法を知りました。Pythonで別のスクリプトを使って新しい変数を作成する

私は2つのpythonスクリプトを持っており、主要なものは3つの変数を渡しています。このスクリプトは1つの関数だけです。このスクリプトは長さ4のタプルを返します。

私の質問は、タプルが最初のスクリプトに新しい変数、たとえば行列やさまざまなベクトルを作成し、関数を繰り返し呼び出すことを避けるための方法があります。

スクリプト1

import numpy as np 
import scipy.integrate as integrate 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 

from Funcion_gamma import Fgamma 

import time 

start_time = time.time() 

"Aluminio" 

E=7e10  #Modulo de Young 
v=0.33  #Modulo de Poison 
G=2.63e10 #Modulo de cizalladura 
h=0.00286 #Anchura de la placa 
a=0.85  #Lado 1 de la placa 
b=0.65  #Lado 2 de la placa 
rho=2703.6 #Densidad del material 
Kmuelle=3 


"M y N" 

m=7 
n=m 

Fgamma(Kmuelle,a,m) 

スクリプト2

import sympy as sp 
import numpy as np 

def Fgamma(KK,aa,M): 

    'Definicion de las variables simbolicas' 

    g, a, A, C, D, K, x = sp.symbols("g a A C D K x") 

    'Funcion Gartner y sus derivadas' 

    X=(A*sp.cos(g*x/a))+(sp.sin(g*x/a))+(C*sp.exp(-g*x/a))+(D*sp.exp(-g*(a-x)/a)) 
    dx1=sp.diff(X,x,1) 
    dx2=sp.diff(X,x,2) 

    'Ecuaciones a resolver' 

    eq1= sp.Eq(X.subs(x,0),0) 
    eq2= sp.Eq(dx2.subs(x,0)/dx1.subs(x,0),K) 
    eq3= sp.Eq(X.subs(x,a),0) 
    eq4= sp.Eq(dx2.subs(x,a)/dx1.subs(x,a),-K) 

    'Resolucion de las ecuaciones' 

    D1=sp.solve(eq1,D) 
    eq33 = eq3.subs(D, D1[0]) 
    C33=sp.solve(eq33,C) 
    D11=D1[0].subs(C,C33[0]) 
    eq22=eq2.subs([(C, C33[0]),(D,D11)]) 
    A22=sp.solve(eq22,A) 

    eq44=eq4.subs([(C,C33[0]),(D,D11)]) 
    A44=sp.solve(eq44,A) 

    'Obtencion de A' 

    AF=A22[0]-A44[0] 
    AFF=sp.sympify(AF.subs([(K,KK),(a,aa)])) 

    'Calculo de las raices de gamma' 

    nn=np.linspace(0,M,num=M,endpoint=False,dtype='int') 
    gamma=np.zeros(M) 
    Afinal=np.zeros(M) 
    Cfinal=np.zeros(M) 
    Dfinal=np.zeros(M)  


    for jj in nn: 
     gamma[jj]=sp.nsolve(sp.Eq(AFF,0),(3+(jj*np.pi))) 
     Afinal[jj]=AFF.subs(g,gamma[jj]) 
     Cfinal[jj]=C33[0].subs([(A,Afinal[jj]),(a,aa),(g,gamma[jj])]) 
     Dfinal[jj]=D11.subs([(A,Afinal[jj]),(a,aa),(g,gamma[jj])]) 
    print gamma 
    return gamma,Afinal,Cfinal,Dfinal 
+0

あなたはアクセスを高速化するために、関数の結果をキャッシュしますか? – user2464424

+0

可能であれば、最初のスクリプトに新しい変数を作成し、その変数を使用して結果を保存します。 –

+0

それからやってください。 'cache = Fgamma(Kmuelle、a、m)'を使って、関数の結果を 'cache'という名前の変数に格納します。それ以外の場合、私はあなたの質問を正しく理解していないかもしれません。 – user2464424

答えて

0

あなたは、両方のスクリプトのファイル名を持っていると仮定は関数を呼び出すには、同じディレクトリ にscript1.pyとscript2.pyことファイルscript2.pyFemmaという名前でscript1.pyを使用します。
ファイルscript1.pyで
import script2
script2.Femma(args)

関連する問題