Unsatisfied answer and no errors
    5 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
Hi, 
I am new  to the Matlab and I want to develop a 10X10X10 voxel(cube) function programme and set all the voxels on the  edges "1" and rest(internal voxels)as "0".  Then I have to  develop a function to calculate the ratio of "1" and "0" and  validate my answer using the hand calculations. I have developed a function to find the voxels on the edges(1) and rest as (0).but i am not satisfied with my answer. there is no error.but the answer is wrong(sum of the voxels on the edges and sum of the internal voxels are wrong). I have selected i,j,k values  that matches with the voxels on the edges(1) and internal voxels(0) as below programme written by me using the hand skethced  diagram.Appreciate your comments.
b=zeros(10,10,10);
for i=1:10
     for j=1:10
         for k=1:10
         if ((i ==1) || (i==2) || (i==3)||(i==4)||(i==5)||(i ==6) || (i==7) || (i==8)||(i==9)||(i==10)) && ((j==1) || (j==10)) && ((k==1) || (k==10))
             b(i,j,k)=1;
         else
             b(i,j,k)=0;
         if ((i ==1) || (i==10)) && ((j==2) || (j==3) || (j==4)||(j==5) || (j==6) || (j==7)||(j==8) || (j==9)) &&( (k==1) || (k==10))
             b(i,j,k)=1;
          else 
             b(i,j,k)=0;
         if ((i ==1) || (i==10)) && ((k==2) || (k==3) || (k==4)|| (k==5) || (k==6) || (k==7)||(k==8) || (k==9)) && ((j==1) || (j==10))
             b(i,j,k)=1;
         else
             b(i,j,k)=0;
             end
            end
         end
         end
     end
end
sum b(i,j,k)=1
sum b(i,j,k)=0
 note---sum b(i,j,k)=1 shown as 695 and sum b(i,j,k)=0 shown as 694 which is totally wrong.(695+694 is not equal to 10X10X10)
0 Kommentare
Akzeptierte Antwort
  Steven Lord
    
      
 am 26 Jun. 2020
        sum b(i,j,k)=1
sum b(i,j,k)=0
These lines don't do what you think they do. They are equivalent to:
sum('b(i,j,k)=1')
sum('b(i,j,k)=0')
which means they're adding up the ASCII values of the characters in those two char vectors.
There's an easier way to create your desired array. Let's start off with a 10-by-10-by-10 array filled with 0's just as you did.
A = zeros(10, 10, 10);
Now, for all the columns and pages of A, we want to fill in rows 1 and 10 with the value 1. This uses array indexing with element positions. When you read this, read : as "all".
A([1 10], :, :) = 1; % Elements in rows 1 and 10, all columns, all pages of A
We do the same for all rows and pages of A, filling in columns 1 and 10.
A(:, [1 10], :) = 1; % Elements in all rows, columns 1 and 10, all pages of A
And the same for all rows and columns, filling in pages 1 and 10.
A(:, :, [1 10]) = 1; % Elements in all rows, all columns, pages 1 and 10 of A
Now if we've done it right, A should have an 8-by-8-by-8 array of 0's still in the middle. Let's make sure it has the right number of 0's.
nnz(A == 0) % 512 == 8*8*8
The only other values in A are an outer "shell" of 1's.
nnz(A == 1) % 1000 - 512 = 488
Weitere Antworten (0)
Siehe auch
Kategorien
				Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange
			
	Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!