How to execute Python script inside a Matlab '' for loop ''?
15 views (last 30 days)
Show older comments
I have two Matlab " for loops " like this,
%Matlab Code:
for M=1:NoRun
for ii=1:NoP
z1 = position(ii,1,M);
z2 = position(ii,2,M);
And inside the second " for loop " I have a ' Python script ' with variables "z1" and "z2" like this,
#Python Code:
# Initialising the ANN
model0 = Sequential()
# Adding 1 hidden layer: the input layer and the first hidden layer
model0.add(Dense(units = z1, activation = 'tanh', input_dim = 4, kernel_initializer=my_init))
# Adding 2 hidden layer
model0.add(Dense(units = z2, activation = 'tanh', kernel_initializer=my_init))
# Adding output layer
model0.add(Dense(units = 6, activation = 'softmax', kernel_initializer=my_init))
# Set up Optimizer
Optimizer = tf.train.AdamOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.99)
# Compiling the ANN
model0.compile(optimizer = Optimizer, loss = 'categorical_crossentropy', metrics=['accuracy','categorical_crossentropy','mse'])
# Fitting the ANN to the Train set, at the same time observing quality on Valid set
history = model0.fit(X_train, y_train_dummy, validation_data=(X_test, y_test_dummy), batch_size = 100, epochs = 1500)
# Generate prediction for all Train, Valid set and Experimental set
y_train_pred_model0 = model0.predict(X_train)
y_test_pred_model0 = model0.predict(X_test)
y_exp_pred_model0 = model0.predict(E_data)
# find final prediction by taking class with highest probability
y_train_pred_model0 = np.array([[list(x).index(max(list(x))) + 1] for x in y_train_pred_model0])
y_test_pred_model0 = np.array([[list(x).index(max(list(x))) + 1] for x in y_test_pred_model0])
y_exp_pred_model0 = np.array([[list(x).index(max(list(x))) + 1] for x in y_exp_pred_model0])
# check what metrics are in fact available in history
history.history.keys()
ac = (accuracy_score(y_test, y_test_pred_model0))*100
I need the value of accuracy_score 'ac' after each time executing the for loop, such that i can give this value to another variable inside this loop like this (written in Matlab)
%Matlab Cade:
Accurcy(M,ii)=ac;
F1=(Accurcy);
IAE(M,ii)=-F1;
pBestFF(ii)=min(IAE(:,ii));
if (pBestFF(ii)-IAE(M,ii))==0
pBestX(ii,:)=position(ii,:,M); %% Personal Best Particles
end
end % Second for loop ends here.
%% Global Best(gBest) Calculation
gBestFF=min(pBestFF);
for ii=1:NoP
if (IAE(M,ii)-gBestFF)==0
gBestX=position(ii,:,M);
end
end
% Calculation of Particle Velocity and Position
c1=2; c2=2;
inertia(M)=((NoRun - M)*(0.9 - 0.4))/NoRun + 0.4;
for ii=1:NoP
for jj=1:dimension
velocity(ii,jj,M+1) =inertia(M)* velocity(ii,jj,M) + c1*rand(1)*(pBestX(ii,jj) -
position(ii,jj,M)) + c2*rand(1)*(gBestX(jj) - position(ii,jj,M));%% Velocity update
velocity(ii,jj,M+1) = min(vmax(jj),max(vmin(jj),velocity(ii,jj,M+1)));
position(ii,jj,M+1) = position(ii,jj,M) + velocity(ii,jj,M+1);
position(ii,jj,M+1)=min(smax(jj),max(smin(jj),position(ii,jj,M+1)));
end
end
gbestFF1=[gbestFF1 gBestFF];
Nrun1=[Nrun1 M];
end % First for loop ends here.
I am doing this in Matlab. Suggest your Ideas for how to do this in Matlab.
0 Comments
Answers (1)
Bo Li
on 17 Feb 2020
Hopefully I understand the question correctly. I wonder you can create a Python function in a Python file mymodule.py to wrap your Python script for example myFunc like following:
#mymodule.py
#myFunc accepts z1 and z2 as inputs, returns ac as output
def myFunc(z1, z2):
#Python logic
return ac
Then you MATLAB loops could look like following:
for M=1:NoRun
for ii=1:NoP
z1 = position(ii,1,M);
z2 = position(ii,2,M);
ac = py.mymodule.myFunc(z1, z2); #mymodule.py should be in Python PATH or current folder
%use ac in more MATLAB logic
4 Comments
Bo Li
on 24 Feb 2020
"how can I import Python script in matlab and pass the arguments (variables) to it and get the result from it, to pass the result to further Matlab Program"
%Say you create a Python file mymodule.py in folder "C:\work" and you have CPython 3.7 installed in "C:\python3" folder. You can launch MATLAB and do following in MATLAB:
>>cd c:\work
>>pyenv('Version', 'C:\python3\bin\python')
>>ac=py.mymodule.myFunc(1,2) %py.mymodule imports the Python module in MATLAB
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!