How can I divide a linear array into 8 equal parts?
Afficher commentaires plus anciens
A=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
This is a long linear array with consecutive 0's and 1's. How can I equally divide this array A into 8 equal parts and count no of 1's from each parts?
5 commentaires
Kevin Chng
le 8 Oct 2018
Hi,
B = reshape(A,5,[])
There are 125 elements in A, hence it cant be equally divide by 8.
Zara Khan
le 8 Oct 2018
Kevin Chng
le 8 Oct 2018
How to count no of 1's from each parts ?
if let say we divide into 5 rows:
A=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
B = reshape(A,[],5);
for i=1:1:5
partSum(i) = sum(B(:,i))
end
Does it work for you?
what will be the code when the array size is not predefined?
numEle = numel(A);
for i=1:1:10
try
B = reshape(A,i,[]);
catch
fprintf('array size is not correct %i \n',i);
end
end
Then it will tell you what is the array size you can reshape them.
Zara Khan
le 8 Oct 2018
Kevin Chng
le 8 Oct 2018
Modifié(e) : Kevin Chng
le 8 Oct 2018
Just noticed the for-loop is not necessary.
B = reshape(A,[],5);
partSum = sum(B)
partSum =
0 5 10 0 0
0 is the total number of 1's in first part, 5 is the second part, 10........so on.
If want be more specific for better understanding, we could
first part = B(:,1);
second part = B(:,2);
third part = B(:,3);
fourth part = B(:,4);
fifth part = B(:,5);
then either use sum(first part) or nnz(firstpart) to count the number of 1's
Réponses (2)
Kevin Chng
le 8 Oct 2018
Modifié(e) : Kevin Chng
le 9 Oct 2018
How to count no of 1's from each parts ?
if let say we divide into 5 rows:
B = reshape(A,[],5);
partSum = sum(B);
you could nnz or sum.
What will be the code when the array size is not predefined?
A=[1 2 3; 4 5 6; 7 8 9]
numEle = numel(A);
for i=1:1:10
numberofsize = rem(numEle,i);
if numberofsize ~= 0
fprintf('array size is not correct for %i \n',i)
end
end
Then it will tell you what is the array size you can reshape them.
7 commentaires
Zara Khan
le 8 Oct 2018
Kevin Chng
le 8 Oct 2018
To check which size i am allowed to reshape them.
Zara Khan
le 8 Oct 2018
Kevin Chng
le 8 Oct 2018
Sorry for my mistake. Edited my answer.
Zara Khan
le 8 Oct 2018
Kevin Chng
le 9 Oct 2018
Modifié(e) : Kevin Chng
le 9 Oct 2018
Ya, you are right, it is my mistake.
NumEle is counting the number of element. Ya, you are right, i should use rem() instead. If the remainder is not 0, the size is not suitable for our reshape size.
Kevin Chng
le 11 Oct 2018
Does it working for you?
Catégories
En savoir plus sur Numeric Types dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!