Access matrix outside of for loop
2 views (last 30 days)
Show older comments
Hello everybody,
I count signals and co-localizations of these signals in big images. I do this with nested loops (I now it's not the optimal way how to do it) which make my code very slow. I want to use parfor to accelerate the run time.
I made a Matrix outside my main for loop in which I save the numbers. After the main for loop I take this Matrix and save it in an ecxel table. By using parfor I'm no longer abel to define my matrix outside of the loop. This gives me the problem that I can't acces my data in the end.
Is there a way to acces data generated in an for loop outside of it?
Thank you for any tips
imagefilesEpo = dir('*Alexa Fluor 488.tif');
imagefilesDCN = dir('*Alexa Fluor 647.tif');
nfiles=length(imagefilesEpo);
Matrix_with_Number_of_colocalization=zeros([nfiles 4]);
parpool(3)
parfor jj=1:nfiles
% Epo = imagefilesEpo(jj);
currentfilenameEpo = imagefilesEpo (jj).name;
currentimageEpo = imread(currentfilenameEpo);
Epo = currentimageEpo;
% DCN = imagefilesDCN(jj);
currentfilenameDCN = imagefilesDCN (jj).name;
currentimageDCN = imread(currentfilenameDCN);
DCN = currentimageDCN;
%% Epo und DCN zeigen
% figure('Name','Overlapping Epo - DCN, both unmodified')
% imshowpair(Epo, DCN)
%% blur
%Epo =imgaussfilt(Epo,5);
%% Threshold Epo with 0.35
Epo035 = imbinarize(Epo, 0.35);
%% max size Epo
Epo035max1900 = bwareafilt (Epo035, [1,1900]);
%% Threshold DCN with 0.25
DCN025 = imbinarize(DCN, 0.25);
%% Boundarys
% remove the % below only if you want to see the boarder on the picture
[Epo_R,Epo_C]=bwboundaries(Epo035max1900,'noholes');
% figure;
% imshow(Epo035max1900)
% hold on
% for k = 1:length(Epo_R)
% boundary = Epo_R{k};
% plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 0.002)
% end
[Marker_R,Marker_C]=bwboundaries(DCN025,'noholes');
% figure;
% imshow(DCN025)
% hold on
% for k = 1:length(Marker_R)
% boundary = Marker_R{k};
% plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 0.002)
% end
%% anzahl column in Matrix M = anzahl zusammenhängende elemente
rEpo=size(Epo_R,1);
rDCN=size(Marker_R,1);
%% anzahl pixel cxcl14015
pixelDCN025 = sum(DCN025(:) == 1);
%% Koordinaten der zusammenhängende Regionen von Epo als vektoren speichern
Koordinaten_Epo=zeros();
a=1;
b=2;
for i=1:rEpo
[E_row,E_col]=find(Epo_C==i);
for j=1:size(E_row)
Koordinaten_Epo(j,a)=E_row(j);
end
for k=1:size(E_col)
Koordinaten_Epo(k,b)=E_col(k);
end
a=a+2;
b=b+2;
end
%% Koordinaten von Marker in array speichern
Koordinaten_Marker=zeros();
[M_row,M_col]=find(Marker_C>=1);
for l=1:pixelDCN025
Koordinaten_Marker(l,1)=M_row(l);
Koordinaten_Marker(l,2)=M_col(l);
end
%% colocalization zählen
Num_colocalization=0;
o=1;
p=2;
while p <=size(Koordinaten_Epo,2)
for m=1:size(Koordinaten_Marker,1)
if p <=size(Koordinaten_Epo,2)
for q=1:size(Koordinaten_Epo,1)
if (Koordinaten_Marker(m,1) == Koordinaten_Epo(q,o)) && (Koordinaten_Marker(m,2) == Koordinaten_Epo(q,p))
Num_colocalization=Num_colocalization+1;
p=p+2;
o=o+2;
break
end
end
end
end
if p <=size(Koordinaten_Epo,2)
o=o+2;
p=p+2;
end
end
% saving the datas in a table
Matrix_with_Number_of_colocalization(jj,1)=Num_colocalization;
Matrix_with_Number_of_colocalization(jj,2)=rEpo;
Matrix_with_Number_of_colocalization(jj,3)=rDCN;
percentage=100/(rEpo/Num_colocalization);
Matrix_with_Number_of_colocalization(jj,4)=percentage;
row_name(jj)={strcat(extractBetween(currentfilenameEpo,1,29))};
end
% save the data
row_name=row_name';
RowName=cell2table(row_name);
Table_with_Number_of_colocalization=array2table(Matrix_with_Number_of_colocalization);
Colocalisation_EPO_DCN=[RowName,Table_with_Number_of_colocalization];
Colocalisation_EPO_DCN.Properties.VariableNames = ["Experiment","Colocalization","Epo","DCN","Colocalization in %"];
% save the final table as excel
filename = 'Colocalisation_EPO_DCN.xlsx';
writetable(Colocalisation_EPO_DCN,filename,'Sheet',1,'Range','A1');
0 Comments
Answers (1)
Sushranth Prakash Hebbar
on 5 Sep 2022
I understand that you want to access the 'Matrix_with_Number_of_colocalization' variable outside the 'parfor' loop.
When a 'parfor' loop is used, the variables are classified into different categories.
For more information on this, you can refer to the following documentation link:
2 Comments
Sushranth Prakash Hebbar
on 5 Sep 2022
Yes. Once, the data has been saved in different files, it should be accessible even outside the 'parfor' loop.
See Also
Categories
Find more on Parallel for-Loops (parfor) in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!