Clear Filters
Clear Filters

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 view (last 30 days)
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

Answers (1)

Zinea
Zinea on 23 Feb 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

Categories

Find more on Characters and Strings 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!