Effacer les filtres
Effacer les filtres

If I want to make a code more generalize and reduce for loop what should I do? here is my code. Here in the very beginning I have written a code only to make 3X3 matrix instead of that if I want to make nXn matrix what should I do?

1 vue (au cours des 30 derniers jours)
clc
clear
A=csvread('topo.txt');
for iter=1:size(A,1)
vec(:,:,iter)=[A(iter,2:4);A(iter,5:7);A(iter,8:10)];
end
% loop over each row
for k=1:size(A,1);
vec_=vec(:,:,k);
% vec_=[0 0 0;1 0 0;0 1 0];
temp=[0 0 0];
co=1;
for ii=1:size(vec_,1)
for jj=1:size(vec_,2)
if vec_(ii,jj)~=0
value=vec_(ii,jj);
if vec_(ii,jj)==-1 % condition: if value is -1 use 2 instead
value=2;
end
temp(co,:)=[jj,ii,value];
co=co+1;
end
end
end
% the above loop analyze the matrix
% the following loop renames the column and row indices
% using char(65)='A', char(66)='B'... and save file in the current
% directory
newfile=strcat(sprintf('%d',A(k,1,1)),'.txt');
fileID = fopen(newfile,'w');
fprintf(fileID,'%s %s %s\n','Source','Target','Type');
for ii=1:size(temp,1)
a=num2str(temp(ii,1)+64,'%s');
b=num2str(temp(ii,2)+64,'%s');
fprintf(fileID,'%s %s %d', a, b, temp(ii,3));
fprintf(fileID,'\n');
end
fclose(fileID);
% the following piece creates a separate directory and move the file
newdir = sprintf('%d',A(k,1,1));
mkdir(newdir)
movefile(newfile,newdir)
end

Réponses (1)

Zinea
Zinea le 23 Fév 2024
Attached below is the code with the following changes:
  1. Matrix dimension is nxn and not hardcoded.
  2. Nested for-loops are removed by using vectorized operations. This increases readability as well as performance of code. You can read about vectorized operations here Vectorization - MATLAB & Simulink - MathWorks India
n = sqrt(size(A, 2) - 1); % Assume A has 1 column for ID and n^2 columns for matrix values
for iter = 1:size(A,1)
vec(:,:,iter) = reshape(A(iter,2:end), [n, n]);
end
% loop over each row
for k = 1:size(A,1)
vec_ = vec(:,:,k);
temp = [];
[row, col, val] = find(vec_); % Use find to get the non-zero values and their indices
% Replace -1 with 2
val(val == -1) = 2;
temp = [col, row, val]; % Concatenate the columns and values
% Add your code for write to file and create a separate directory
end

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by