- Matrix dimension is nxn and not hardcoded.
- 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
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?
    6 次查看(过去 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
0 个评论
回答(1 个)
  Zinea
      
 2024-2-23
         Attached below is the code with the following changes: 
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 
0 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 File Operations 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

