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 次查看(过去 30 天)
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

回答(1 个)

Zinea
Zinea 2024-2-23
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

类别

Help CenterFile Exchange 中查找有关 Debugging and Analysis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by